使用 System.Windows.Forms.BorderStyle 自定义绘图?

Custom drawing using System.Windows.Forms.BorderStyle?

我想根据 属性 BorderStyle 的值模仿默认边框的绘制。 我的控件不是围绕控件的单个边框,而是可视化为四个相邻的自定义绘制框 (2×2),每个框都有单独绘制的标准边框。因此,例如,如果 Control.Border 设置为 FixedSingle 值,我想在每个框周围绘制单个边框。简化示例:

我有两个相关问题:

如果您想要在机器上获得看起来像 BorderStyles 的可靠结果,您应该使用 ControlPaint 对象的方法。

为了测试,让我们在 Paint 事件之外进行测试:

Panel somePanel = panel1;

using (Graphics G = somePanel.CreateGraphics())
{
    G.FillRectangle(SystemBrushes.Window, new Rectangle(11, 11, 22, 22));
    G.FillRectangle(SystemBrushes.Window, new Rectangle(44, 44, 66, 66));
    G.FillRectangle(SystemBrushes.Window, new Rectangle(11, 44, 22, 66));
    G.FillRectangle(SystemBrushes.Window, new Rectangle(44, 11, 66, 22));

    ControlPaint.DrawBorder3D(G, new Rectangle(11, 11, 22, 22));
    ControlPaint.DrawBorder3D(G, new Rectangle(44, 44, 66, 66));
    ControlPaint.DrawBorder3D(G, new Rectangle(11, 44, 22, 66));
    ControlPaint.DrawBorder3D(G, new Rectangle(44, 11, 66, 22));
}

Console.WriteLine("BorderSize.Width = " + SystemInformation.BorderSize.Width);
Console.WriteLine("Border3DSize.Width = " + SystemInformation.Border3DSize.Width);

在我的机器上,这会生成类似于您的屏幕截图..:[=​​16=]

..输出中的这些行:

BorderSize.Width = 1

Border3DSize.Width = 2