[英]set panel border thickness in c# winform
我进行了搜索,结果无法解决我的情况。 实际上我有一个面板,我希望面板的边框比 Windows 给出的边框更厚。 我需要边框样式
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
先生给出的案例,要修复它,只需像这样为您的panel1
处理SizeChanged
事件:
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);
调整大小时您可能会看到一些闪烁,只需添加此代码即可为您的 panel1 启用 doubleBuffered:
typeof(Panel).GetProperty("DoubleBuffered",
BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(panel1,true,null);
要创建带边框的面板,我将面板放置在面板中。 “边框面板”具有所需边框颜色和填充的背景颜色,而padding
大小是所需边框thickness
。
这种解决方案的优点是没有闪烁,也没有调整大小的问题。
这可以非常简单地在设计器中或在代码后面创建。
后面的代码:
Panel panel_Border = new Panel();
Panel panel_Embedded = new Panel();
panel_Border.BackColor = Color.Green;
panel_Border.Controls.Add(panel_Embedded);
// this is the border thickness
panel_Border.Padding = new System.Windows.Forms.Padding(6);
panel_Border.Size = new System.Drawing.Size(200, 100);
panel_Embedded.BackColor = System.Drawing.SystemColors.Control;
panel_Embedded.Dock = System.Windows.Forms.DockStyle.Fill;
创建一个新的、稍大的面板并将背景颜色设置为黑色(或其他颜色)。 将原始面板放在较大的面板内。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.