调用鼠标事件并向消息框提供输入时出现问题!

| 我的问题似乎有点冗长,但是我知道解决方案将是对我的代码的一些更正。我正在以1的形式实现一系列3个鼠标事件和一次paint事件 pictureBox1_MouseDown, pictureBox1_MouseMove, pictureBox1_Paint, pictureBox1_MouseUp。 代码应该以这种方式工作:当我单击鼠标并将其拖动并在所需位置释放按钮时,应该出现一个使用输入值的自定义消息框。因此,我构造了一个显示为消息框的form(form2)。这是我的表格1的代码,看到代码后您就可以理解问题。 形式1:
     private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        // \"e.X\" and \"e.Y\" are used to get MousePositionX and MousePositionY
        rect = new Rectangle(0, 0, e.X, e.Y);
        pictureBox1.Invalidate();
    } 
    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        // This makes sure that the left mouse button is pressed.
        if (e.Button == MouseButtons.Left)
        {
            // Draws the rectangle as the mouse moves

            rect.Width = e.X;
            rect.Height = e.Y;
        }
        pictureBox1.Invalidate();
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {

        using (Pen pen = new Pen(Color.Red, 2))
        {
            e.Graphics.DrawRectangle(pen, rect);
        }
    }


    private WindowsFormsApplication2.Form2 _form2 = new WindowsFormsApplication2.Form2();

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        DialogResult dialogresult = _form2.ShowDialog(this);


        if (dialogresult == DialogResult.OK)
        {
            try
            {
                for (int i = 0; i < 2; i++)
                {
                    l[i] = e.X;
                    m[i] = e.Y;
                }
            }
            catch (Exception ex)
            {
            }
        }
    }
这里的问题是: 1)根据代码,当我们拖动鼠标时会出现一个矩形,并且在我们离开鼠标按钮的地方出现一个消息框,现在此消息框(form2)无法读取输入值,因为我不知道如何连接单击确定,然后单击取消,然后单击确定,然后单击确定。取消输入后,矩形将消失,但是这没有发生。 2)我只需要给输入两次,即我只执行两次前面的动作序列(所有鼠标事件和绘画事件),所以我相应地编写了FOR循环。但是问题是消息框(form2)每次被解雇时,我释放鼠标button.This引起了一个严重的问题,因为我必须在提供两个输入后实现mousedoubleclick事件。 任何请给我说我必须做的必要更正。 提前致谢。     
已邀请:
        我不确定“将form2的OK和CANCEL按钮与form1连接”是什么意思? 您不必“连接”任何东西。您只需要在Form2上单击两个按钮(“确定”和“取消”),并且在每个_click方法中,都需要
this.DialogResult = DialogResult.OK;
表示OK,and2表示取消。 然后,您在表格1中继续输入\“ if \”。
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            DialogResult dialogresult = _form2.ShowDialog(this);

            if (dialogresult == DialogResult.OK)
            {                
                rect.Width = 0;
                rect.Height = 0;
                pictureBox1.Invalidate();
            }
        } 
这将删除矩形。我不知道这是否是一个很好的解决方案,但是可以。 方法中的循环无法按您希望的方式工作:每次调用
pictureBox1_MouseUp
并到达for循环时,“ i \”将设置为“ 0”,然后循环开始。 您在Form1的构造函数中需要一个“ 5”。并且您必须相应地更改
pictureBox1_MouseUp
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            if (TwoClicks < 2)
            {
            TwoClicks++;
            DialogResult dialogresult = _form2.ShowDialog(this);

            if (dialogresult == DialogResult.OK)
            {                
                rect.Width = 0;
                rect.Height = 0;
                pictureBox1.Invalidate();
            }
            }
        }
随时提出任何问题(如果我没有正确回答,请描述您的第一个问题)。     

要回复问题请先登录注册