Ich habe eine TabControl
, die mehrere Registerkarten enthält. Jede Registerkarte hat eine UserControl
darauf. Ich möchte die Sichtbarkeit eines Controls prüfen x
auf UserControl
A
von UserControl
B
. Ich dachte mir, dass x.Visible
von UserControl
B
gut genug wäre. Es stellte sich heraus, dass false
im Debugger angezeigt wurde, obwohl ich explizit true
festlegte und es nie geändert wurde. Dann lese ich auf MSDN für Control.Visible , dass:
Auch wenn "Sichtbar" auf "Wahr" gesetzt ist, ist das Steuerelement für den Benutzer möglicherweise nicht sichtbar, wenn es hinter anderen Steuerelementen verborgen ist.
Zu meiner Überraschung wird das nicht funktionieren. Jetzt frage ich mich, wie ich feststellen kann, ob das Steuerelement x
von einem anderen UserControl
sichtbar ist. Ich möchte, wenn möglich, vermeiden, einen Boolean zu verwenden. Ist jemand darauf gestoßen und hat eine Lösung gefunden?
Hinweis: Es scheint auch, dass Control.IsAccessible
in dieser Situation falsch ist.
Leider bietet das Steuerelement nichts öffentliches, was Ihnen erlaubt, dies zu überprüfen.
Eine Möglichkeit wäre, etwas in der Eigenschaft "Tag" der Steuerelemente zu setzen. Der Zweck des Tags besteht darin, Benutzerdaten mit dem Steuerelement zu verknüpfen. Es kann also alles sein, nicht nur ein Boolescher Wert.
Hier ist das Tag-Eigenschaftendokument
Wenn Sie den Brute-Force-Weg wirklich wollen, können Sie Reflection verwenden und GetState (2) aufrufen:
%Vor%Tags und Links c# winforms visibility controls .net-3.5