检测SplitContainer崩溃时的变化
本文关键字:变化 崩溃 SplitContainer 检测 | 更新日期: 2023-09-27 18:19:20
我有一个SplitContainer,我想捕捉Panel2折叠和扩展事件。
你知道怎么做吗?
为那些可能和我一样在寻找相同答案的人发布这篇文章。
不幸的是,SplitContainer没有为折叠的事件提供任何直接事件。我发现有用的是监控对面面板的sizechange和/或clientsizechange事件。
意思是,如果我对监视Panel2的崩溃感兴趣,我会为Panel1订阅ClientSizeChanged事件。
在实践中,我建议监控SplitContainer的两个面板的clientsizechange,以保证您不会错过任何初始化或直接拆分器移动。
在下面的例子中,我有一个切换按钮(btnToggle),我希望检查状态遵循SplitContainer中的Panel2的可见性:
private void splitContainer_Panel2_ClientSizeChanged(object sender, EventArgs e)
{
btnToggle.Checked = !splitContainer.Panel2Collapsed;
}
private void splitContainer_Panel1_ClientSizeChanged(object sender, EventArgs e)
{
btnToggle.Checked = !splitContainer.Panel2Collapsed;
}
没有确切的事件,但这是因为你应该知道什么时候它会崩溃,当它运行的代码:
splitContainer1.Panel1Collapsed = true;
// do your stuff
否则,您可以在SplitContainer控件上监视SplitterMoved
或SplitterMoving
事件。
splitContainer.Panel1.VisibleChanged += (s, e) => { bool isPanel1Collapsed = splitContainer.Panel1Collapsed; };
在内部实现中,当SplitContainer
中的面板被折叠时,其Visible
属性被设置为false
,反之亦然。因此,可以通过处理所需面板的VisibleChanged
事件来检测面板折叠时的变化。
问题是SplitterPanel
类没有公开这个事件。但是,由于它继承了公开此事件的Panel
类,因此您可以强制转换为Panel
并从那里处理事件,如下面的示例代码所示。
private void Initialize()
{
split = new SplitContainer();
((Panel)split.Panel1).VisibleChanged += splitPanel1_Collapsed;
}
private void splitPanel1_Collapsed(object sender, EventArgs e)
{
var panel = (SplitterPanel)sender;
var panelCollapsed = !panel.Visible;
}