我正在尝试对我当前的模块进行图形增强/补充。不可否认,我喜欢Windows 10的1px(我认为?)应用程序窗口的边框。问题是,我正在使用的设施仍在使用运行Windows 7/8 / 8.1操作系统的计算机/笔记本电脑 - 我不喜欢它们旧的厚边框。所以我所做的就是在为基于WinForm的模块重新创建这个UI Candy。
基本上,我删除了表格上的边框。然后我利用Paint Event Handler绘制高度或宽度为1px的线条。到目前为止,我已经取得了成功,特别是在Form-> Panel-> Panel等堆叠控件中 - 我们每个人都在顶部,左侧,右侧或底部分别画线。
现在我的下一步斗争是使用DataGrid Control(我还预测其他带有ScrollBars的控件可能会有相同的情况) - 它不会在整个控件中绘制线条。基本上,当我绘制线条时,它只在Grid的单元格上绘制它,不包括右侧的滚动条(可能还有底部滚动条)。我一直试图寻找解决方案,但无济于事,一个解决方案说是在控制器上打一个小组,我觉得这不是一个好主意。
请参阅下图,了解我正在寻找解决方案的问题,您可以注意到DataGridView的ScrollBar似乎没有绘制边框。
我很高兴地感谢有人可以帮助我,谢谢。
下面是我绘制1px边框的代码,我实际上把它变成了一个静态方法,所以我只需要在需要时调用它 - 减少重复的代码:
public static void DrawBorder(Control control, Color penColor, params BorderLocation[] borderLocations)
{
var pen = new Pen(penColor);
var pointA = new Point(0, 0);
var pointB = new Point(0, 0);
control.Paint += (sender, e) => {
foreach(BorderLocation borderLocation in borderLocations)
{
switch(borderLocation)
{
case BorderLocation.Left:
pointA = new Point(0, 0);
pointB = new Point(0, control.Height);
break;
case BorderLocation.Right:
pointA = new Point(control.Width - 2, 0);
pointB = new Point(control.Width - 2, control.Height);
break;
case BorderLocation.Top:
pointA = new Point(0, 0);
pointB = new Point(control.Width, 0);
break;
case BorderLocation.Bottom:
pointA = new Point(0, control.Height - 2);
pointB = new Point(control.Width, control.Height - 2);
break;
default:
pointA = new Point(-1, -1);
pointB = new Point(-1, -1);
break;
}
e.Graphics.DrawLine(pen, pointA, pointB);
}
};
}
我会称之为:
UITools.DrawBorder(dGridWipedPhones, Color.FromArgb(76, 175, 80), BorderLocation.Right, BorderLocation.Bottom);