Avatar billede orca Nybegynder
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
Avatar billede jakobandersen Nybegynder
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
}
}
Avatar billede kichian Nybegynder
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(..);
Avatar billede kichian Nybegynder
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
}
}
Avatar billede jakobandersen Nybegynder
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.
Avatar billede orca Nybegynder
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
Avatar billede kichian Nybegynder
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()
Avatar billede kichian Nybegynder
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.?
Avatar billede orca Nybegynder
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.
Avatar billede kichian Nybegynder
08. september 2002 - 12:46 #9
Og UpdateLists er public? Hvad er fejlen?
Avatar billede orca Nybegynder
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"

:/
Avatar billede jakobandersen Nybegynder
08. september 2002 - 13:11 #11
kichian >> Doh.. Der havde jeg vist ikke lige alle hjernecellerne på arbejde :-)
Avatar billede kichian Nybegynder
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.
Avatar billede orca Nybegynder
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
Avatar billede kichian Nybegynder
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()
Avatar billede orca Nybegynder
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester