Hej! Jag håller på att konvertera ett gammalt VB6-projekt till VB.Net, och har stött på ett problem som jag inte lyckas lösa. Formulären i .net är klasser som du inte har direkt åtkomst till så du måste instanciera ditt formulär innan du kan använda det som ett objekt. Hej! Jag förstår, men fortfarande anropas inte händelsen för deactivate så att det gamla formuläret kan stängas. Skule ju kunna fånga "lostFocus"-eventet men det kanske inte blir riktigt rätt. Det kan det mycket väl göra.Öppna nytt formulär och stäng ett gammalt
Jag har ett MDI-formulär, som innehåller alla andra formulär i programmet. Jag vill bara kunna ha ett formuläri taget öppet där, så när ett nytt fönster öppnas ska det gamla formuläret stängas automatiskt.
I VB6 löste jag detta genom att det på varje formulär fanns en händelse-procedur kopplad till händelsen Deactivate. Under varje sådan händelse skedde sedan ett "Unload Me". Ett nytt formlär öppnade jag genom frm1.show.
Efter konverteringen av VB6-projektet står det "Me.Close" istället under händelse-proceduren kopplad till Deactivate, men Deactivate anropas inte. I VB.net används "frm1.DefInstance.Show()" för att öppna ett formulär (detta har VB själt skrivit i konverteringen).
Jag trodde man skulle vara tvungen att skriva någonting i stil med
dim frm1 as new form
frm1.show
för att få det att fungera, men då öppnades bara ett blankt formulär och inte det formulär jag ville ha.
Någon som vet vad jag ska göra?
/ThoreSv: Öppna nytt formulär och stäng ett gammalt
Sv: Öppna nytt formulär och stäng ett gammalt
Jag har två formulär, frmSF och frmSB. Jag har frmSB öppet, och när jag istället öppnar frmSF vill jag att frmSB ska stängas automatiskt. När jag öppnar frmSF skriver jag i koden
Dim objfrmSF As frmSF
objfrmSF = New frmSF()
objfrmSF.Show()
och det fungerar jättebra, och formuläret öppnas så fint. Men bakom ligger fortfarande frmSB öppet. Händelsehanteranden för frmSB ser ut så här:
Private Sub frmSB_Deactivate(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Deactivate
Me.Close()
End Sub
Kom nu inte med lösningen att jag bör lägga in en stängning av frmSB i den kod som öppnar frmSF, för det finns nämligen flera formulär än dessa och man kan aldrig veta vilket av dessa formulär som är öppet och vilket användaren vill öppna, så det måste finnas en lösning som kollar att "oj, nu är jag visst inte längre önskad, så däreför stänger jag ner mig själv till jag är önskad igen".Sv: Öppna nytt formulär och stäng ett gammalt
Bättre är att i MDI-parent fånga eventet "MdiChildActivate" och där loopa igenom alla barn och göra "close" på dem om de inte är "ActivMdiChild"
Löser det dina problem?Sv: Öppna nytt formulär och stäng ett gammalt
Hur skulle koden för detta se ut i så fall?