2012-01-04 42 views

回答

6

發佈此信息給其他人,可能正在尋找與我相同的答案。

不幸的是,SplitContainer不爲摺疊事件提供任何直接事件。我發現有用的是將OPPOSITE面板的SizeChanged和/或ClientSizeChanged事件監視到正在摺疊的那個事件。

這意味着,如果我有興趣監視Panel2的崩潰,我將爲Panel1訂閱ClientSizeChanged事件。

實際上,我會建議監測SplitContainer的兩個面板的ClientSizeChanged,以保證您不會錯過任何初始化或直接拆分移動。

在下面的例子我有一個開關按鈕(btnToggle),我想的選中狀態遵循是Panel2在SplitContainer的可見性:

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

不是正好爲一個事件,但是那是因爲你應該知道什麼時候,當它的代碼運行它變得崩潰:

splitContainer1.Panel1Collapsed = true; 
// do your stuff 

否則,您可以觀看有關的SplitterMovedSplitterMoving事件SplitContainer控件。

+0

SplitterMoved只有在從複合模式轉換爲未複合時才起作用,SplitterMoving不會在解開和解開任何想法時着火。我知道Panel1Collapsed和Panel2Collapsed任何想法 – AMH 2012-01-04 14:17:20

+0

@AMH用戶無法摺疊面板,這意味着您可以控制它。當你設置Panel1Collapsed = true;那麼你應該做任何你想做的事情。很難理解這個問題。也許發佈你想要做的一些代碼(編輯你的問題)。 – LarsTech 2012-01-04 14:31:13

1
splitContainer.Panel1.VisibleChanged += (s, e) => { bool isPanel1Collapsed = splitContainer.Panel1Collapsed; }; 
0

在內部實現中,當一個面板在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; 
}