使用SplitContainer來實現隱藏窗口的部分內容(轉)


有兩種方法:

(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的雙擊事件,代碼如下:

 

[csharp]  view plain  copy
 
  1. private void hideBtn_Click(object sender, EventArgs e)  
  2. {  
  3.     originWidth = panel1.Width;  
  4.     panel1.Width = 0;          
  5. }  

即設置panel1.width來實現

 

(5) 添加顯示按鈕showBtn的雙擊事件,代碼如下:

 

[csharp]  view plain  copy
 
  1. private void showBtn_Click(object sender, EventArgs e)  
  2. {  
  3.     panel1.Width = originWidth;  
  4. }  

走過的彎路(希望大家有借鑒):

 

(1) 剛開始想通過Splitter1.Location屬性來設置Splitter1的位置

 

[csharp]  view plain  copy
 
  1. Splitter1.Location=new Point(this.width, 0);  

但是始終不行,在設置完之后,又會自動回復,沒有變化。

 

(2) 后來想想,可能是由於Splitter1是Right停靠的,由於Panel1的關系,所以不能自動調整Location屬性

所以,把Panel1的Location也進行了設置

 

[csharp]  view plain  copy
 
  1. splitter1.Location = new Point(this.Width, 0);  
  2. splitter1.MinSize = 0;  
  3. 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雙擊事件,代碼如下:

 

[csharp]  view plain  copy
 
  1. private void hideBtn_Click(object sender, EventArgs e)  
  2. {  
  3.     origionWidth = splitContainer1.Panel1.Width;  
  4.     splitContainer1.SplitterDistance = splitContainer1.Width;  
  5. }  

(4) 添加顯示按鈕showBtn雙擊事件,代碼如下:

 

 

[csharp]  view plain  copy
 
  1. private void showBtn_Click(object sender, EventArgs e)  
  2. {  
  3.     splitContainer1.SplitterDistance = origionWidth;  
  4. }  

走過的彎路:

 

SplitContainer.SplitterIncrement屬性:

獲取或設置一個值,該值表示拆分器移動的增量(以像素為單位)

本來想着,既然表示拆分器的移動增量,應該可以的吧

結果也是不好使

小結:

代碼也不難,但是碰到了很多難纏的問題。

也可能那些屬性可行,但是方法不對。待以后研究吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM