有兩種方法:
(1) Splitter:比較老的方法
(2) SplitContainer:比較新的方法
最終界面如下:
方法一:使用Splitter實現
(1) 在窗口中添加一個Panel控件,即Panel1
將其Dock屬性設為Right,這樣Panel1就停靠在了窗口最右側;
(2) 在窗口中添加一個Splitter控件,即Splitter1
將其Dock屬性設為Right,這樣Splitter1就停靠在了Panel1的左邊緣;
將其Size屬性中的X設為1,這樣Splitter1幾乎不可見;
將其Visible屬性設為false,這樣Splitter1就不能用於手工調整;
注意:此時,Splitter1.MinSize就不管作用了(MinSize屬性是用來限制Splitter1拖動時,不至於Panel1太小而無法使用的)
(3) 設置Int型的變量:
private int originWidth;
用來存儲初始的Panel1的寬度,在顯示Panel1時使用。
(4) 添加隱藏按鈕hideBtn的雙擊事件,代碼如下:
- private void hideBtn_Click(object sender, EventArgs e)
- {
- originWidth = panel1.Width;
- panel1.Width = 0;
- }
即設置panel1.width來實現
(5) 添加顯示按鈕showBtn的雙擊事件,代碼如下:
- private void showBtn_Click(object sender, EventArgs e)
- {
- panel1.Width = originWidth;
- }
走過的彎路(希望大家有借鑒):
(1) 剛開始想通過Splitter1.Location屬性來設置Splitter1的位置
- Splitter1.Location=new Point(this.width, 0);
但是始終不行,在設置完之后,又會自動回復,沒有變化。
(2) 后來想想,可能是由於Splitter1是Right停靠的,由於Panel1的關系,所以不能自動調整Location屬性
所以,把Panel1的Location也進行了設置
- splitter1.Location = new Point(this.Width, 0);
- splitter1.MinSize = 0;
- panel1.Location = new Point(this.Width, 0);
發現還是不行,無解了簡直...
后來高手的提示下,修改了panel1.width=0,才告一段落
方法二:使用SplitContainer實現
SplitContainer控件的使用比較簡單,封裝了三個控件:Panel1, Splitter(沒說名字), Panel2
關鍵屬性:SplitContainer.SplitterDistance
該屬性可以設置拆分器離 SplitContainer 的左邊緣或上邊緣的位置
(1) 在窗口上添加一個SplitContainer控件;
(2) 設置一個Int型的變量,用來存儲SplitContainer.Panel1的寬度;
private int originWidth;
(3) 添加隱藏按鈕hideBtn雙擊事件,代碼如下:
- private void hideBtn_Click(object sender, EventArgs e)
- {
- origionWidth = splitContainer1.Panel1.Width;
- splitContainer1.SplitterDistance = splitContainer1.Width;
- }
(4) 添加顯示按鈕showBtn雙擊事件,代碼如下:
- private void showBtn_Click(object sender, EventArgs e)
- {
- splitContainer1.SplitterDistance = origionWidth;
- }
走過的彎路:
SplitContainer.SplitterIncrement屬性:
獲取或設置一個值,該值表示拆分器移動的增量(以像素為單位)
本來想着,既然表示拆分器的移動增量,應該可以的吧
結果也是不好使
小結:
代碼也不難,但是碰到了很多難纏的問題。
也可能那些屬性可行,但是方法不對。待以后研究吧