Ich bin kürzlich auf die folgende Situation gestoßen. Ich habe eine UserControl
, die eine nicht modale Toolbox zeigen kann. Wenn der Benutzer die Toolbox angezeigt hat, möchte ich ihn ausblenden und entsprechend anzeigen, da die UserControl
selbst unsichtbar bzw. sichtbar wird. Die UserControl
kann in eine beliebige Anzahl von übergeordneten Containern eingebettet sein, wie z. B. GroupBox
oder TabPage
, die beeinflussen können, ob die UserControl
tatsächlich sichtbar ist oder nicht, obwohl ihre eigene -Eigenschaft True
ist.Die beste Möglichkeit, eine Toolbox zu verbergen, die mit einem Benutzersteuerelement in .NET 2.0 verknüpft ist?
In WPF scheint es, als ob ich das IsVisibleChanged
Ereignis der UserControl
verwenden könnte, um damit umzugehen. Gibt es eine Entsprechung für WinForms? Was wäre eine allgemeine Lösung in .NET 2.0?
EDIT: Hier ist die Lösung, die ich ankam. Gibt es eine bessere Lösung?
public partial class MyControl : UserControl
{
private List<Control> _ancestors = new List<Control>();
private bool _isVisible = false;
public MyControl()
{
InitializeComponent();
ParentChanged += OnParentChanged;
VisibleChanged += OnVisibleChanged;
}
private void OnParentChanged(object sender, EventArgs e)
{
foreach (Control c in _ancestors)
{
c.ParentChanged -= OnParentChanged;
c.VisibleChanged -= OnVisibleChanged;
}
_ancestors.Clear();
for (Control ancestor = Parent; ancestor != null; ancestor = ancestor.Parent)
{
ancestor.ParentChanged += OnParentChanged;
ancestor.VisibleChanged += OnVisibleChanged;
_ancestors.Add(ancestor);
}
}
private void OnVisibleChanged(object sender, EventArgs e)
{
bool isVisible = Visible;
foreach (Control c in _ancestors)
{
if (!c.Visible)
{
isVisible = false;
break;
}
}
if (isVisible != _isVisible)
{
_isVisible = isVisible;
// Control visibility has changed here
// Do something
}
}
}
Ich akzeptiere das, weil es anscheinend keine Alternative gibt, die Sichtbarkeit selbst zu überprüfen. Ich habe Tag nicht benutzt. – Eric