2013-10-03 45 views
4

我有搜索和結果無法解決我的情況。 其實我有一個面板,我希望面板比Windows給出的邊框厚。 我需要邊框在c#winform中設置面板邊框的厚度

BorderStyle.FixedSingle 

厚..之前

+1

使用使用Paint()事件,使其看起來像你想要的厚。 –

+0

這是一個[重複](http://stackoverflow.com/questions/1852829/i-want-to-make-a-panel-have-a-thick-border-can-i-set-this-somehow) 。然而,這裏接受的答案是唯一對我有用的答案。其他解決方案刪除了​​右邊界和底部邊界。 – nunzabar

回答

14

感謝你有一點點的風俗畫,以定製自己的Panel

//Paint event handler for your Panel 
private void panel1_Paint(object sender, PaintEventArgs e){ 
    if(panel1.BorderStyle == BorderStyle.FixedSingle){ 
    int thickness = 3;//it's up to you 
    int halfThickness = thickness/2; 
    using(Pen p = new Pen(Color.Black,thickness)){ 
     e.Graphics.DrawRectangle(p, new Rectangle(halfThickness, 
               halfThickness, 
               panel1.ClientSize.Width-thickness, 
               panel1.ClientSize.Height-thickness)); 
    } 
    } 
} 

這裏是面板的厚度爲截屏30

Screen shot of panel with border thickness of 30

:的Rectangle尺寸是在該圖線的中間計算,假設你畫線與4厚度,就會有一個的2的外部和2內的偏移量。

我沒有測試先生Hans給出的情況下,解決它簡單地處理該事件SizeChangedpanel1這樣的:

private void panel1_SizeChanged(object sender, EventArgs e){ 
    panel1.Invalidate(); 
} 

您也可以使用Reflection設置ResizeRedraw = true,而無需辦理SizeChanged事件如上所示:

typeof(Control).GetProperty("ResizeRedraw", BindingFlags.NonPublic | BindingFlags.Instance) 
       .SetValue(panel1, true, null); 

您可能會看到調整的時候有點閃爍,只需添加以下代碼,以使doubleBuffered y的我們PANEL1:

typeof(Panel).GetProperty("DoubleBuffered", 
          BindingFlags.NonPublic | BindingFlags.Instance) 
      .SetValue(panel1,true,null); 
+0

謝謝,這正是我想要的:D – rifleon

+3

將面板停靠在右側+底部,然後調整窗體大小以使其出現錯誤。 –

+0

@HansPassant感謝您指出它,看起來像定製控件時,我們總是需要添加代碼處理'resizing'。 –

0

創建一個新的,稍大面板和背景顏色設置爲黑色(或其他)。將原始面板放置在較大的面板內。