VB.NET: True = False ??? / VBasic / vb.net / vbs / wsh
KMassler 13. Feb. 2020, 11:40

Hallo,

ich habe gerade einen seltsamen Effekt, der mich wahnsinnig macht:

Ich möchte eine Form aufrufen, vorher wird ein Button auf dieser Form auf sichtbar gesetzt (.visible = True). Eine Zeile tiefer frage ich den Wert von .visible ab, und der steht auf False.

Code:

With MyForm

...
            .btnCancel.Visible = True

            Debug.Print("MyForm: Cancel-Button-Visible= " & .btnCancel.Visible.ToString)
...
End With



Debug.print-Ergebnis:
MyForm: Cancel-Button-Visible= False
Ich versteh's net!     

Und noch seltsamer: Obwohl hier .visible auf False steht, wird der Button angezeigt!

Torsten Niemeier 13. Feb. 2020, 12:01

Könntest du nach dem True-Setzen mal ein DoEvents einbauen und erzählen, wie es dann aussieht?

KMassler 13. Feb. 2020, 15:17

Das ändert nichts.

Aber komischerweise: Wenn ich die Form mit .ShowDialog aufrufe, stimmt die Darstellung wie gewünscht.
 

fritsrol 14. Feb. 2020, 08:57

Ich habe folgende Vermutung

Kann es sein das die Form bei der ersten Abfrage noch nicht dargestellt wird ?
Keine Form sichtbar -> Elemente der Form auch noch nicht sichtbar ...

Gruß
Roland

HenryV 14. Feb. 2020, 12:49

Hallo Klaus

Das Problem mit der Eigenschaft "Visible/Aktiviert" in .Net-Controls ist, dass sie vom übergeordneten Container abhängig ist.
Das heisst, solange die Form nicht sichtbar ist, wird jedes Control Visible=false haben.

Man kann aber "schummeln" indem man GetState(2) mit Reflection abfragt.

Code:
Dim IsVisible As Boolean = CType(GetType(Control).GetMethod("GetState", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic).Invoke(MyForm.btnCancel, New Object() {2}), Boolean)

How to get the “real” value of the Visible property?

Gruss Andreas

KMassler 17. Feb. 2020, 14:49

Danke,
das erklärt das Verhalten.
Ich konnte mir behelfen, indem ich als führende Eigenschaft .enabled verwendet habe, in Load-Prozedur wird dann die visible-Eigenschaft auf denselben Wert gesetzt.