Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用鼠标事件和向消息框提供输入时出现问题!_C#_Mouseevent_Messagebox_Paint - Fatal编程技术网

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

C# 调用鼠标事件和向消息框提供输入时出现问题!,c#,mouseevent,messagebox,paint,C#,Mouseevent,Messagebox,Paint,我的问题似乎有点长,但我知道解决办法是对我的代码稍加修改 图1\u鼠标向下, pictureBox1\u鼠标移动, 图1\u油漆, 图1\u鼠标 代码应该是这样工作的:当我单击鼠标并拖动它并在所需点释放按钮时,应该会出现一个接受输入值的自定义消息框。这是我的表格1的代码,你可以在看到代码后理解问题 表格1: private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { // "e.X"

我的问题似乎有点长,但我知道解决办法是对我的代码稍加修改

图1\u鼠标向下, pictureBox1\u鼠标移动, 图1\u油漆, 图1\u鼠标

代码应该是这样工作的:当我单击鼠标并拖动它并在所需点释放按钮时,应该会出现一个接受输入值的自定义消息框。这是我的表格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)
            {
            }
        }
    }
private void pictureBox1\u MouseDown(对象发送方,MouseEventArgs e)
{
//“e.X”和“e.Y”用于获取MousePositionX和MousePositionY
rect=新矩形(0,0,e.X,e.Y);
pictureBox1.Invalidate();
} 
私有void pictureBox1\u MouseMove(对象发送方,MouseEventArgs e)
{
//这将确保按下鼠标左键。
if(e.Button==MouseButtons.Left)
{
//在鼠标移动时绘制矩形
矩形宽度=e.X;
垂直高度=e.Y;
}
pictureBox1.Invalidate();
}
私有void pictureBox1_Paint(对象发送方,PaintEventArgs e)
{
使用(钢笔=新钢笔(颜色:红色,2))
{
e、 绘图矩形(钢笔、矩形);
}
}
私有WindowsFormsApplication2.Form2 _Form2=新WindowsFormsApplication2.Form2();
私有无效图片box1u MouseUp(对象发送器,MouseEventArgs e)
{
DialogResult DialogResult=_form2.ShowDialog(此);
if(dialogresult==dialogresult.OK)
{
尝试
{
对于(int i=0;i<2;i++)
{
l[i]=e.X;
m[i]=e.Y;
}
}
捕获(例外情况除外)
{
}
}
}
这里的问题是:

1) 根据代码,当我们拖动鼠标时,会出现一个矩形,我们离开鼠标按钮的地方会出现一个消息框,现在这个消息框(form2)无法读取输入值,因为我不知道如何将form2的“确定”和“取消”按钮与form1连接。在输入并按下“确定”后,矩形应该消失,但在这里,它并没有发生

2) 我只需要输入两次,也就是说,我只需要执行前一个动作序列(所有鼠标事件和绘制事件)两次,所以我相应地为循环编写了代码。但问题是消息框(form2)每次都会被触发,我松开鼠标按钮。这导致了一个严重的问题,因为在给出两个输入之后,我必须实现一个mousedoubleclick事件

如果有任何问题,请告诉我必须做的必要更正。
提前谢谢。

我不知道你说的“将form2的“确定”和“取消”按钮与form1连接起来”是什么意思

你不必“连接”任何东西。您所需要的只是Form2上的两个按钮(OK和Cancel),在每个单击方法中,您需要
this.DialogResult=DialogResult.OK
表示确定,而
this.DialogResult=DialogResult.Cancel用于取消

然后你继续填写表格1中的“如果”

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\u MouseUp
并到达for循环时,“i”将设置为“0”,然后循环开始。
在Form1的构造函数中需要一个
intTwoClicks=0
。您必须相应地更改
pictureBox1\u 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();
            }
            }
        }
private void pictureBox1\u MouseUp(对象发送器,MouseEventArgs e)
{
如果(两次单击<2)
{
双击++;
DialogResult DialogResult=_form2.ShowDialog(此);
if(dialogresult==dialogresult.OK)
{                
矩形宽度=0;
直线高度=0;
pictureBox1.Invalidate();
}
}
}

请随时提出任何问题(如果我没有理解正确,请描述您的第一个问题)。

很难猜到这段代码要做什么。l[]和m[]是什么?为什么要将它们指定到显示对话框之前鼠标的位置?我怀疑您想用rect做些什么。我正在尝试将鼠标指针的坐标输入到l[]和m[]中,但不确定它们的声明是否正确。我必须给出两次输入,因此我的FOR循环运行了两次。因此,这些鼠标指针值将存储在这些数组中,以便我进行进一步的计算!非常感谢你!你以正确的方式抓住了我的意图!!当我按下按钮时,它们应该按照您所说的方式工作,如果可以,它必须接受给定的值,如果取消,它必须再次请求输入,但此时两次单击不应增加。在给出两次输入后,当我双击图片框时,矩形不应出现,但是它还是出现了。@raghu:你必须在mousedown中(也可能在mousemove中)用“if(TwoClicks<2)”来做同样的把戏。这应该行得通。