C# 如何在windows窗体中不混淆鼠标单击和鼠标按下事件?
我有一个MenuStrip,我想从中拖动表单主体上的一些内容(然后会发生一些事情,例如表单的背景颜色正在更改,等等)。我正在处理MouseDown事件,但问题是,当我单击C# 如何在windows窗体中不混淆鼠标单击和鼠标按下事件?,c#,winforms,C#,Winforms,我有一个MenuStrip,我想从中拖动表单主体上的一些内容(然后会发生一些事情,例如表单的背景颜色正在更改,等等)。我正在处理MouseDown事件,但问题是,当我单击ToolStripMenu中的选项时,同样的事情发生了(表单的背景色正在改变,等等)。 我想要的是以某种方式将MouseClick与MouseDown分开。更准确地说,当我点击MenuStrip的一个选项时,我不希望发生任何事情 单击时,将触发MouseDown事件。我想忽略它,除非鼠标光标移动 private void sal
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
}
}
还要注意的是,有一些奇怪的边缘情况,比如表单失去焦点,或者用户拖动到表单边界之外。一些需要注意和处理的内容。您必须向我们展示您的代码。完成了,抱歉。