08. september 2002 - 01:16
Der er
14 kommentarer og 1 løsning
Udfør handling efter form.close
Hej alle.
Jeg åbner en form ved navn frmAddServer i min form frmConnect således:
Dim addServer As New frmAddServer()
addServer.Show()
Men hvordan udfører jeg en handling _efter_ at addServer er blevet lukket, vel at mærke med ReturnValue = "OK". Funktionen jeg skal kalde er i formen frmConnect, er det muligt at kalde en funktion i denne dialog, fra den nye dialog?
Mvh Mark
--
www.improve.dk
Annonceindlæg fra Kommando
08. september 2002 - 12:04
#1
Du kan lave noget ala nedenstående, men prøv at forklare dig lidt nærmere jeg tror ikke helt jeg forstår dit problem. while(true){ if( addServer != null){ //Do stuff } }
08. september 2002 - 12:07
#2
Tja.. det er ikke muligt at kalde noget fra en form der er lukket. Men i close_eventen kan addServer godt kalde frmConnect. frmAddServer skal have en metode der kan tage en reference til frmConnect. Fx: protected frmConnectType _kaldendeForm; public void SetParenForm (frmConnectType kaldendeForm) { _kaldendeForm = kaldendeForm } I close_evnten på addServer skriver du så: _kaldendeForm.FunktionDerSkalKaldes(..);
08. september 2002 - 12:11
#3
I forlængelse af moonducks svar er det ikke nok at teste på null. Der skal også testes på IsDisposed. Fx: while(true){ if(!(addServer == null || addServer.IsDisposed)){ //Do stuff } }
08. september 2002 - 12:14
#4
Det kommer vel an på om man husker at sætte sine objekter lig null efter de er blevet disposed.
08. september 2002 - 12:28
#5
Hej igen. I close eventen kalder jeg nu følgende funktion: Dim frmConnectForm As frmConnect = Me.ParentForm frmConnectForm.UpdateLists(frmConnectForm.cboServerGroups.SelectedIndex) VS brokker sig ikke over koden, men siger "Object reference not set to an instance of an object". Jeg har sikkert misforstået noget :) Mvh Mark
08. september 2002 - 12:34
#6
Er det Me.ParentForm den brokker sig over? For så skal du i frmConnect huske Dim addServer As New frmAddServer() Me.AddOwnedForm(addServer) addServer.Show()
08. september 2002 - 12:36
#7
>> moonduck : Hvordan ved du om en formvariabel skal sættes = null, hvis formen selv lukker sig som i spørgsmålet.?
08. september 2002 - 12:43
#8
Stadig problemer :(. Nu åbner jeg frmAddServer således: Dim addServer As New frmAddServer() Me.AddOwnedForm(addServer) addServer.Tag = arrGroupIDs(cboServerGroups.SelectedIndex) addServer.Show() Og jeg prøver at kalde en funktion i frmConnect fra frmAddServer således: Dim frmConnectForm As frmConnect = Me.ParentForm frmConnectForm.UpdateLists(frmConnectForm.cboServerGroups.SelectedIndex) Og den brokker sig over den ovenstående linie (.UpdateLists). Jeg hæver lige points lidt.
08. september 2002 - 12:46
#9
Og UpdateLists er public? Hvad er fejlen?
08. september 2002 - 12:50
#10
Yep, UpdateLists er public: Public Function UpdateLists(ByVal StartIndex As Integer) Fejlen er den samme som før "Object reference not set to an instance of an object" :/
08. september 2002 - 13:11
#11
kichian >> Doh.. Der havde jeg vist ikke lige alle hjernecellerne på arbejde :-)
08. september 2002 - 13:39
#12
Jeg kan heller ikke lige få ParentForm til at give det jeg forventer. Så der er lige noget der skal læses op på :-) Men den løsning jeg startede med at beskrive fungerer OK.
08. september 2002 - 13:54
#13
kichian -> Jeg kan desværre ikke få dit eksempel til at virke, nok fordi jeg ikke oversætte C# koden til VB godt nok, kan du uddybde det lidt? Mvh Mark
08. september 2002 - 15:12
#14
I frmAddServer definerer du en global variabel Fx, public _KaldendeForm as frmConnect Derudover defineres en public metode Fx. public function SetKaldendeForm(kaldendeForm as frmConnect) _KaldendeForm = kaldendeForm end function Fra din frmAddServer kan der så kaldes tilbage med _KaldendeForm.UpdateLists(_KaldendeForm.cboServerGroups.SelectedIndex) eller det du nok i virkeligeheden vil: _KaldendeForm.UpdateLists(Tag) For at sætte det hele op skal der i frmConnectForm gøres følgende: Dim addServer As New frmAddServer() addServer.SetKaldendeForm(Me) addServer.Tag = arrGroupIDs(cboServerGroups.SelectedIndex) addServer.Show()
08. september 2002 - 16:01
#15
Hej igen. Jeg fik din kode til at virke, samt min egen, dog har jeg fået et nyt problem. (jeg har accepteret dit svar, du behøver ikke hjælpe mere :)). I min frmAddServers OK knap kører jeg koden her: '#Tilføj serveren til db'en Dim sqlCmd As New OleDbCommand("INSERT INTO [tblServers] ([Title], [Address], [Timeout], [Username], [Password], [GroupID], [Database], [Comment]) VALUES ('" & Replace(txtName.Text, "'", "''") & "', '" & Replace(txtAddress.Text, "'", "''") & "', 3000, '" & Replace(txtUsername.Text, "'", "''") & "', '" & Replace(txtPassword.Text, "'", "''") & "', 22, '" & Replace(txtDatabase.Text, "'", "''") & "', '" & Replace(txtComment.Text, "'", "''") & "')", Conn) Conn.Open() sqlCmd.ExecuteNonQuery() Conn.Close() '#Opdater serverlisten i frmConnect Dim frmConnectForm As frmConnect = Me.Owner frmConnectForm.UpdateLists(frmConnectForm.cboServerGroups.SelectedIndex) '#Luk vindue Close() Den melder ikke om nogen fejl, men der blievr ikke tilføjet noget til databasen, Connection string'en er korrekt, og den har fat i db'en. Mvh Mark
Kurser inden for grundlæggende programmering