6

我进行了搜索,结果无法解决我的问题。实际上我有一个面板,我希望面板的边框比 Windows 给定的更厚。我需要边框样式

BorderStyle.FixedSingle

更厚..谢谢之前

4

3 回答 3

22

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

边框厚度为 30 的面板屏幕截图

注意: 的尺寸Rectangle是在画线的中间计算的,假设你画的线的粗细是4,外面会有 2 的偏移量,里面会有 2 的偏移量。

我没有测试 Mr 给出的案例Hans,修复它只需像这样SizeChanged为您处理事件panel1

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

您还可以设置ResizeRedraw = trueusingReflection而无需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);
于 2013-10-03T16:16:54.883 回答
1

为了创建一个带边框的面板,我在面板中放置了一个面板。“边框面板”具有所需边框颜色的背景颜色和填充,而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;
于 2020-07-01T06:06:28.147 回答
0

创建一个稍大的新面板并将背景颜色设置为黑色(或其他)。将原始面板放在较大的面板内。

于 2017-11-08T15:37:57.710 回答