你必须用一点自定义绘画来自定义你自己的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的Size是在画线中间计算的,假设你画线的粗细为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);