Hej! Jag har ett program i VB.Net där jag har ett formulär som är ett MDI-fönster. Jag öppnar nya fönster inuti det genom olika menyer. När jag exempelvis klickar på meyn Sök, körs kod som ser ut så här: Kan du inte ha en "global" variabel som hela tiden pekar på det senast öppnade formuläret. Dvs någonting i stil med :Döda gamla formulär
objfrmSB = New frmSB()
objfrmSB.Show()
objfrmSB är ett publict objekt i MDI-fönstret, alltså ej deklaretat under händelsen för meny som man klickar på.
Jag vill att det bara ska kunna vara ett fönster öppet åt gången inuti MDF-formuläret. Därför måste jag, när jag öppnar ett nytt formulär, döda det gamla. Jag har ett tiotal olika formulär dför vilka denna regel gäller, och jag vet aldrig vilket formulär en användare har uppe och vilket formulär han öppnar istället, så att lägga koden som dödar formuläret under menyn som öppnar formuläret är uteslutet. I VB6 löste jag detta genom Deactivate-händelsen för formuläret; när ett nytt formulär öppnades, kördes eventet i det gamla formuläret och det stängdes.
Problemet är att jag inte lyckas åstadkomma samma sak i Vb.Net. Jag har prövat händelserna för Deactivate och leave, samt en del andra mindre orimliga händelser, men de körs inte när ett nytt formulär öppnas, initieras eller vad dte nu heter på riktigt språk.
Jag har fått tipset att i MDI-formuläret fånga händelsen "MdiChildActivate" och där loopa igenom alla barn och döda dem om de inte är "ActivMdiChild". Händelsen MDIChildActivate anropas när den ska, men jag lyckas inte få koden som ska loopa barnen och döda dem att fungera.
Någon som kan hjälpa mig med att antingen berätta hur koden för att loopa och döda ska se ut eller berätta varför händelserna i respektive formulär inte anropas?
Tacksam för all hjälp.
/ThoreSv: Döda gamla formulär
If Not IsNothing(CurrentForm) Then
CurrentForm.Close()
CurrentForm=Nothing
End If
objfrmSB = New frmSB()
CurrentForm=objfrmSB
objfrmSB.Show()
/Per Hultqvist