Forms_Initialize

02/04/2015 - 09:46 von Lothar Geyer | Report spam
Ich verwende in einer Form den _Initialize-Event, um z.B. bestimmte
Controls Lizenz-abhàngig (nicht) anzuzeigen. Nun habe ich bei einem
Anwender gesehen, dass in einer (MDIchild-)Maske eine Combobox gezeigt
wird, obwohl die entsprechende Lizenz nicht vorhanden ist. Allerdings
wird diese Combobox immer erst beim zweiten Aufruf der Maske gezeigt.

Ich dachte immer, die beim _Initialize gesetzten Parameter bleiben immer
erhalten. D.h. bei einer Routine wie

Private Sub Form_Initialize()
Dim tDiffH As Long

If Not Lizenz.VFun(fuAktionen) Then
tDiffH = cboKampagne.Top - cboKdStatus.Top
cboKampagne.Visible = False
fraSelektKz.Height = fraSelektKz.Height - tDiffH
fraNextKontakt.Top = fraNextKontakt.Top - tDiffH
fraButtons.Top = fraButtons.Top - tDiffH
Me.Height = Me.Height - tDiffH
End If

Exit Sub

End Sub

bleiben die Abmessungen der Frames und die .Visible-Eigenschaften der
Combobox auch über einen Restart erhalten. Die Form wird auch über ein
einfaches .Show gestartet, es sind also nicht mehrere Instanzen möglich.

Mache ich da seit Jahren etwas falsch (hab' bisher sonst nichts bemerkt)
oder muss es sich da um einen anderen Effekt handeln?

Lothar Geyer
 

Lesen sie die antworten

#1 Wolfgang Enzinger
03/04/2015 - 12:21 | Warnen spam
Lothar Geyer wrote:

Ich verwende in einer Form den _Initialize-Event, um z.B. bestimmte
Controls Lizenz-abhàngig (nicht) anzuzeigen. Nun habe ich bei einem
Anwender gesehen, dass in einer (MDIchild-)Maske eine Combobox gezeigt
wird, obwohl die entsprechende Lizenz nicht vorhanden ist. Allerdings
wird diese Combobox immer erst beim zweiten Aufruf der Maske gezeigt.



Works as designed, und ist mit einem simplem Projekt leicht nachvollziehbar.
Gegeben sei eine MDIForm (MDIForm1) mit nix drauf, nur ein Eventhandler:

Private Sub MDIForm_Click()
Form1.Show
End Sub

Form1 ist ein MDIChild mit einer Combobox (Combo1) drauf, die Form hat
ebenfalls nur einen Eventhandler:

Private Sub Form_Initialize()
Combo1.Visible = False
End Sub

Starte das Programm, klicke auf die MDIForm, und Form1 wird angezeigt: ist
leer. Schliesse Form1 über das Systemmenü (X), klicke wieder auf die MDIForm
und ... hoppala.

Die Erklàrung dafür findest du in diesem uralten, aber nichtsdestoweniger sehr
empfehlenswerten Artikel:

Life Cycle of Visual Basic Forms
https://msdn.microsoft.com/en-us/li...60%29.aspx

Das wichtigeste zu deinem Problem: beim Unload der Form werden die Controls
ebenfalls entladen, somit gehen zur Laufzeit geànderte Eigenschaften der
Controls und der Form verloren. Initialize wird aber beim erneuten Laden nicht
mehr durchlaufen, solange du Form1 nicht auf Nothing gesetzt hast - sie
befindet sich dann weiterhin im Zustand 1 (Created, but not loaded.).

Viele Grüsse,
Wolfgang
http://www.enzinger.net

Ähnliche fragen