我有搜索和結果無法解決我的情況。 其實我有一個面板,我希望面板比Windows給出的邊框厚。 我需要邊框在c#winform中設置面板邊框的厚度
BorderStyle.FixedSingle
厚..之前
我有搜索和結果無法解決我的情況。 其實我有一個面板,我希望面板比Windows給出的邊框厚。 我需要邊框在c#winform中設置面板邊框的厚度
BorderStyle.FixedSingle
厚..之前
感謝你有一點點的風俗畫,以定製自己的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
:
注:的Rectangle
尺寸是在該圖線的中間計算,假設你畫線與4
厚度,就會有一個的2的外部和2內的偏移量。
我沒有測試先生Hans
給出的情況下,解決它簡單地處理該事件SizeChanged
您panel1
這樣的:
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);
謝謝,這正是我想要的:D – rifleon
將面板停靠在右側+底部,然後調整窗體大小以使其出現錯誤。 –
@HansPassant感謝您指出它,看起來像定製控件時,我們總是需要添加代碼處理'resizing'。 –
創建一個新的,稍大面板和背景顏色設置爲黑色(或其他)。將原始面板放置在較大的面板內。
使用使用Paint()事件,使其看起來像你想要的厚。 –
這是一個[重複](http://stackoverflow.com/questions/1852829/i-want-to-make-a-panel-have-a-thick-border-can-i-set-this-somehow) 。然而,這裏接受的答案是唯一對我有用的答案。其他解決方案刪除了右邊界和底部邊界。 – nunzabar