为什么这不会画任何东西?

时间:2017-02-22 08:01:38

标签: c# winforms system.drawing

我的代码中有以下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。在第二次单击时,应在两个坐标之间绘制一条线。 这不起作用,我无法弄清楚原因。有人能告诉我什么是错的吗?

1 个答案:

答案 0 :(得分:3)

您的代码存在两个主要问题。

首先,你在表格上调用CreateGraphics,而不是图片框 - 所以如果你真的画到了正确的地方,图纸就会被图片框隐藏。

其次,你的合作伙伴关闭了,因为Cursor.Position返回了屏幕 - coördinates,而不是相对于你正在绘制的控件的coördinates。但这已经没有必要 - 你不应该首先使用Click事件,而是MouseUpClick是一个不同的动作,它根本不需要涉及指点设备(例如,按下按钮上的空格)。您想要处理鼠标点击,因此请使用鼠标事件。作为奖励,您将获得事件处理程序参数中点击的本地协调:)

最后,如果你想让图像保持不变,我建议不要直接绘制图片框图形对象,而是创建一个内存位图来保存图形,并让图片框重新绘制为它认为合适。否则,任何导致重绘图片框的内容也会清除你到目前为止所绘制的内容。