DataGridView上的PaintEvent不会在ScrollBar上绘制

时间:2018-01-11 05:38:59

标签: c# datagridview paintevent

我正在尝试对我当前的模块进行图形增强/补充。不可否认,我喜欢Windows 10的1px(我认为?)应用程序窗口的边框。问题是,我正在使用的设施仍在使用运行Windows 7/8 / 8.1操作系统的计算机/笔记本电脑 - 我不喜欢它们旧的厚边框。所以我所做的就是在为基于WinForm的模块重新创建这个UI Candy。

基本上,我删除了表格上的边框。然后我利用Paint Event Handler绘制高度或宽度为1px的线条。到目前为止,我已经取得了成功,特别是在Form-> Panel-> Panel等堆叠控件中 - 我们每个人都在顶部,左侧,右侧或底部分别画线。

现在我的下一步斗争是使用DataGrid Control(我还预测其他带有ScrollBars的控件可能会有相同的情况) - 它不会在整个控件中绘制线条。基本上,当我绘制线条时,它只在Grid的单元格上绘制它,不包括右侧的滚动条(可能还有底部滚动条)。我一直试图寻找解决方案,但无济于事,一个解决方案说是在控制器上打一个小组,我觉得这不是一个好主意。

请参阅下图,了解我正在寻找解决方案的问题,您可以注意到DataGridView的ScrollBar似乎没有绘制边框。

enter image description here

我很高兴地感谢有人可以帮助我,谢谢。

下面是我绘制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);

0 个答案:

没有答案