2009-06-12 5 views
2

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 
     } 
    } 
} 

Antwort

0

Leider, wenn mit mehreren Formularen oder Kontrollen arbeiten, Eigenschaften wie Visible erfordern, dass Sie sie manuell einstellen. Es ist mühsam und mühsam, alle Steuerelemente zu durchlaufen, deren Eigenschaften von den Eigenschaften anderer Steuerelemente abhängen.

Was passiert, wenn Sie den UserControl.Tag so einstellen, dass er auf Ihre Toolbox verweist?

+0

Ich akzeptiere das, weil es anscheinend keine Alternative gibt, die Sichtbarkeit selbst zu überprüfen. Ich habe Tag nicht benutzt. – Eric

Verwandte Themen