Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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# 如何在windows窗体中不混淆鼠标单击和鼠标按下事件?_C#_Winforms - Fatal编程技术网

C# 如何在windows窗体中不混淆鼠标单击和鼠标按下事件?

C# 如何在windows窗体中不混淆鼠标单击和鼠标按下事件?,c#,winforms,C#,Winforms,我有一个MenuStrip,我想从中拖动表单主体上的一些内容(然后会发生一些事情,例如表单的背景颜色正在更改,等等)。我正在处理MouseDown事件,但问题是,当我单击ToolStripMenu中的选项时,同样的事情发生了(表单的背景色正在改变,等等)。 我想要的是以某种方式将MouseClick与MouseDown分开。更准确地说,当我点击MenuStrip的一个选项时,我不希望发生任何事情 单击时,将触发MouseDown事件。我想忽略它,除非鼠标光标移动 private void sal

我有一个MenuStrip,我想从中拖动表单主体上的一些内容(然后会发生一些事情,例如表单的背景颜色正在更改,等等)。我正在处理MouseDown事件,但问题是,当我单击
ToolStripMenu
中的选项时,同样的事情发生了(表单的背景色正在改变,等等)。 我想要的是以某种方式将
MouseClick
MouseDown
分开。更准确地说,当我点击
MenuStrip
的一个选项时,我不希望发生任何事情

单击时,将触发
MouseDown
事件。我想忽略它,除非鼠标光标移动

private void salmonToolStripMenuItem_MouseDown(object sender, MouseEventArgs e)
{
    //gets the cursor position at the moment when mouse down is activated
    p1M = Cursor.Position.X;
    p2M = Cursor.Position.Y;
    //miscare shows if the mouse moved
    if (miscare == true)
    {
        //do things 
    }
}

private void Rezervare1_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Copy;
}

private void salmonToolStripMenuItem_MouseUp(object sender, MouseEventArgs e)
{    
    //gets the cursor position to see if it moved
    p1m = Cursor.Position.X;
    p2m = Cursor.Position.Y;
    if (p1M != p1m || p2M != p2m)
    {
        miscare = true;//it means the cursor moved
    }
    else miscare = false;
}

如果您希望您的逻辑发生在鼠标移动时,那么让我们来处理
MouseMove

bool isMouseDown = false;

private void salmonToolStripMenuItem_MouseDown(object sender, MouseEventArgs e)
{ 
    isMouseDown = true;
}

private void salmonToolStripMenuItem_MouseUp(object sender, MouseEventArgs e)
{ 
    isMouseDown = false;
}

private void salmonToolStripMenuItem_MouseMove(object sender, MouseEventArgs e)
{
    if(isMouseDown)
    {
        //Do your thing
    }
}

还要注意的是,有一些奇怪的边缘情况,比如表单失去焦点,或者用户拖动到表单边界之外。一些需要注意和处理的内容。

您必须向我们展示您的代码。完成了,抱歉。