我的代码中有以下if语句:
//global variables
int x1;
int y1;
int x2;
int y2;
int counter = 0;
private void pictureBox1_Click(object sender, EventArgs e)
{
if (radioButtonDrawLine.Checked)
{
if (counter == 0)
{
x1 = Cursor.Position.X;
y1 = Cursor.Position.Y;
counter++;
}
else
{
x2 = Cursor.Position.X;
y2 = Cursor.Position.Y;
if (counter == 1)
{
Graphics g = CreateGraphics();
g.DrawLine(Pens.Black, x2, y2, x1, y1);
}
counter = 0;
}
}
}
我应该在我的图片框上点击两次,每次点击都会保存x和y。在第二次单击时,应在两个坐标之间绘制一条线。 这不起作用,我无法弄清楚原因。有人能告诉我什么是错的吗?
答案 0 :(得分:3)
您的代码存在两个主要问题。
首先,你在表格上调用CreateGraphics
,而不是图片框 - 所以如果你真的画到了正确的地方,图纸就会被图片框隐藏。
其次,你的合作伙伴关闭了,因为Cursor.Position
返回了屏幕 - coördinates,而不是相对于你正在绘制的控件的coördinates。但这已经没有必要 - 你不应该首先使用Click
事件,而是MouseUp
。 Click
是一个不同的动作,它根本不需要涉及指点设备(例如,按下按钮上的空格)。您想要处理鼠标点击,因此请使用鼠标事件。作为奖励,您将获得事件处理程序参数中点击的本地协调:)
最后,如果你想让图像保持不变,我建议不要直接绘制图片框图形对象,而是创建一个内存位图来保存图形,并让图片框重新绘制为它认为合适。否则,任何导致重绘图片框的内容也会清除你到目前为止所绘制的内容。