私は最近、次のような状況に遭遇しました。私は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
}
}
}
私はこれを受け入れています。なぜなら、自分自身の視認性をチェックする代替手段がないように思われるからです。私はタグを使用しませんでした。 – Eric