我在列表中保存了一些线对象并尝试在图片框上绘制一次,但每次在图片框的中间只绘制一条线时,是否有解决此问题的方法。 提前谢谢......
public class Lines
{
public System.Drawing.Point startPoint = new System.Drawing.Point();
public System.Drawing.Point endPoint = new System.Drawing.Point();
}
Lines b = new Lines();
List<Lines> alllines = new List<Lines>();
//------------inside button click i wrote the following code----------
b.startPoint.X = rectlist[i].X;
b.startPoint.Y = (rectlist[i].Y + rectlist[i].Bottom) / 2;
b.endPoint.X = rectlist[i].Right;
b.endPoint.Y = (rectlist[i].Top + rectlist[i].Bottom) / 2;
alllines.Add(b);
this.OrignalimgPIcBX.Invalidate();
并且在图片框的paint事件中我写了这段代码
Graphics g = e.Graphics;
using (var pen = new Pen(Color.Black, 2))
{
foreach (var lines in alllines)
{
g.DrawLine(pen, lines);
}
}
有什么问题??!
现在正确的行列表 但是知道线对象没有绘制在正确的位置
我将图片框大小模式设为拉伸图像,是否有任何改变!
这是油漆事件
private void OrignalimgPIcBX_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
using (var pen = new Pen(Color.Black, 2))
{
foreach (var lines in alllines)
{
g.DrawLine(pen, lines.startPoint, lines.endPoint);
}
}
}
答案 0 :(得分:1)
只有3种可能的解释,
您需要使用调试器并断开线条以确保它们使用正确的指标进行绘制
<强>更新强>
for (int i = 0; i < rectlist.Count; i++)
{
var b = new Lines(); // <-- you need to do this
b.startPoint.X = rectlist[i].X;
b.startPoint.Y = (rectlist[i].Y + rectlist[i].Bottom) / 2;
b.endPoint.X = rectlist[i].Right;
b.endPoint.Y = (rectlist[i].Top + rectlist[i].Bottom) / 2;
alllines.Add(b);
}
您的问题是您只是更改同一行并将其添加到列表
即你的名单一遍又一遍地以同一行结束