检测SplitContainer何时折叠更改

时间:2012-01-04 13:42:53

标签: c# winforms

我有一个SplitContainer我想抓住Panel2折叠和扩展事件。

知道怎么做吗?

4 个答案:

答案 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控件上查看SplitterMovedSplitterMoving事件。

答案 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;
}