我有一个SplitContainer我想抓住Panel2折叠和扩展事件。
知道怎么做吗?
答案 0 :(得分:6)
将其发布给可能正在寻找与我相同答案的其他人。
不幸的是,SplitContainer不为折叠事件提供任何直接事件。我发现有用的是监视OPPOSITE面板的SizeChanged和/或ClientSizeChanged事件到你正在折叠的事件。
意思是,如果我对监视Panel2的崩溃感兴趣,我会订阅Panel1的ClientSizeChanged事件。
在实践中,我建议监视SplitContainer的两个面板的ClientSizeChanged,以保证不会错过任何初始化或直接分割器移动。
在下面的示例中,我有一个切换按钮(btnToggle),我希望Checked状态跟随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;
}
答案 1 :(得分:1)
没有完全相同的事件,但那是因为你应该知道它运行的代码何时崩溃:
splitContainer1.Panel1Collapsed = true;
// do your stuff
否则,您可以在SplitContainer控件上查看SplitterMoved
或SplitterMoving
事件。
答案 2 :(得分:1)
splitContainer.Panel1.VisibleChanged += (s, e) => { bool isPanel1Collapsed = splitContainer.Panel1Collapsed; };
答案 3 :(得分:1)
在内部实施中,当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;
}