使用 System.Windows.Forms.BorderStyle 自定义绘图?
Custom drawing using System.Windows.Forms.BorderStyle?
我想根据 属性 BorderStyle
的值模仿默认边框的绘制。
我的控件不是围绕控件的单个边框,而是可视化为四个相邻的自定义绘制框 (2×2),每个框都有单独绘制的标准边框。因此,例如,如果 Control.Border
设置为 FixedSingle
值,我想在每个框周围绘制单个边框。简化示例:
我有两个相关问题:
- 我可以使用哪种标准方法从枚举中绘制边框
System.Windows.Forms.BorderStyle
?
- 如何确定给定边框的像素宽度(例如
Fixed3D
)以便在布局计算中使用它?
如果您想要在机器上获得看起来像 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
我想根据 属性 BorderStyle
的值模仿默认边框的绘制。
我的控件不是围绕控件的单个边框,而是可视化为四个相邻的自定义绘制框 (2×2),每个框都有单独绘制的标准边框。因此,例如,如果 Control.Border
设置为 FixedSingle
值,我想在每个框周围绘制单个边框。简化示例:
我有两个相关问题:
- 我可以使用哪种标准方法从枚举中绘制边框
System.Windows.Forms.BorderStyle
? - 如何确定给定边框的像素宽度(例如
Fixed3D
)以便在布局计算中使用它?
如果您想要在机器上获得看起来像 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