我已经浏览了一下这个网络,但是没有找到我正在寻找的确切答案,或者我已经尝试了建议但它不起作用!
我遇到的问题是,我的屏幕上有一个大约72个复选框,矩阵中我使用我将其存储在列表中的坐标连接在一起。
要绘制线条,我在OnPaint的覆盖方法中使用Drawline方法迭代列表,如下所示: -
protected override void OnPaint(PaintEventArgs e)
{
Pen myPen = new Pen(System.Drawing.Color.Black);
Graphics g = this.CreateGraphics();
myPen.Width = 5;
foreach(ConnectionLine cl in connectionLines)
{
g.DrawLine(myPen, cl.xStart, cl.yStart, cl.xStop, cl.yStop);
}
myPen.Dispose();
g.Dispose();
}
关于这一点的奇怪之处在于它似乎并不是花费时间绘制的线条 - 它现在是复选框,如果我在眨眼之间删除这些刷新的线路功能。
任何想法都非常感激。
谢谢,
戴夫
答案 0 :(得分:3)
部分问题可能是您每次绘制控件时都在重新创建Graphics对象。相反,您应该使用e.Graphics
中提供的PaintEventArgs
对象。您也可以尝试仅使用一个Pen实例。
private readonly Pen _myPen = new Pen(System.Drawing.Color.Black) {Width = 5};
protected override void OnPaint(PaintEventArgs e)
{
foreach (var cl in connectionLines)
e.Graphics.DrawLine(_myPen, cl.xStart, cl.yStart, cl.xStop, cl.yStop);
}
答案 1 :(得分:1)
无需创建自己的并处理Graphics对象。使用事件处理程序可用的内容。此外,您应该使用using
而不是明确地调用Dispose。
protected override void OnPaint(PaintEventArgs e)
{
using (Pen myPen = new Pen(System.Drawing.Color.Black, 5.0))
{
foreach(ConnectionLine cl in connectionLines)
e.Graphics.DrawLine(myPen, cl.xStart, cl.yStart, cl.xStop, cl.yStop);
}
}
此外,如果您的线路连接,您应该使用Graphic的DrawLines方法获得更好的性能和更清晰的代码。在调用之前,您必须更改存储积分的方式或从conncetionLines集合中提取积分。