2009-06-12 9 views
2

私は最近、次のような状況に遭遇しました。私はUserControlがあり、それはモードレスツールボックスを示すことができます。ユーザーがツールボックスを表示している場合は、UserControlが表示されなくなるか、または表示されるように、ツールボックスを非表示にして適切に表示したいと考えています。 UserControlは、GroupBoxまたはTabPageなどの任意の数の親コンテナに埋め込むことができ、プロパティがTrueであっても、UserControlが実際に表示されるかどうかに影響を与えることができます。.NET 2.0のUserControlに関連付けられたツールボックスを非表示にする最適な方法は?

WPFでは、これを処理するためにUserControlというIsVisibleChangedイベントを使用できるようです。 WinFormsに相当するものはありますか? .NET 2.0の一般的なソリューションは何でしょうか?

EDIT:ここに私が到着した解決策があります。より良い解決策はありますか?複数のフォームまたはコントロールを扱うとき

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

答えて

0

は残念ながら、Visibleなどのプロパティは、あなたがそれらを手動で設定する必要があります。それは痛みです、そして、プロパティが他のコントロールのプロパティに依存するすべてのコントロールを通過するのはやや面倒です。

ツールボックスを参照するようにUserControl.Tagを設定するとどうなりますか?

+0

私はこれを受け入れています。なぜなら、自分自身の視認性をチェックする代替手段がないように思われるからです。私はタグを使用しませんでした。 – Eric

関連する問題