Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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#_.net_Winforms_Window - Fatal编程技术网

C# 在第一个鼠标事件已触发时触发特殊鼠标事件

C# 在第一个鼠标事件已触发时触发特殊鼠标事件,c#,.net,winforms,window,C#,.net,Winforms,Window,现在我有一个mousedown事件触发,同时我也想触发mousemove事件。但是这样做:this.capture=false将触发所有鼠标事件。所有我想要的是鼠标移动事件(特定事件)触发,而鼠标下降事件触发 思考的方式是。我希望在触发事件A时触发事件B(不是任何事件) 我想到了多线程。但是我没有足够的关于多线程的信息来继续执行它。所以,若这是需要做的,谁能给我提供一些代码供我参考?非常感谢你的阅读 我知道你们在想什么: “为什么不在mousedown中调用鼠标移动事件?” 我试过这么做,但是

现在我有一个mousedown事件触发,同时我也想触发mousemove事件。但是这样做:
this.capture=false将触发所有鼠标事件。所有我想要的是鼠标移动事件(特定事件)触发,而鼠标下降事件触发

思考的方式是。我希望在触发事件A时触发事件B(不是任何事件)

我想到了多线程。但是我没有足够的关于多线程的信息来继续执行它。所以,若这是需要做的,谁能给我提供一些代码供我参考?非常感谢你的阅读


我知道你们在想什么: “为什么不在mousedown中调用鼠标移动事件?”
我试过这么做,但是mouseeventarg没有更新,换句话说,鼠标移动的鼠标位置仍然保持在一个恒定的位置,因为在我的情况下捕获仍然是正确的。

可能发生的情况是,因为您正在移动控件,鼠标相对于控件的位置是恒定的,这就是mouseeventarg不更新的原因。在MouseDown上,您应该保存控件的初始位置,在调用MouseMove时,您应该将currentPosition.Left-initialPosition.Left添加到鼠标X,将.Top添加到鼠标Y

触发事件时,创建一个新的MouseEventArgs对象:

int newX = oldMea.X + Control.Left - initialPosition.Left;
int newY = oldMea.Y + Control.Top - initialPosition.Top;
var newMea = new MouseEventArgs(oldMea.Button, newX, newY, oldMea.Delta);

我是如何做到的,我使用另一个计时器来替换鼠标移动事件,我简单地使用全局屏幕鼠标位置来定位鼠标下降事件期间我想要的任何位置,这可以模拟鼠标拖动动作。是的,我也许应该在代码的开头使用鼠标拖动。谢谢大家的帮助

我认为你看错了Windows消息。你到底想做什么?我只想让两个事件一起触发,然后分别触发为什么你不尝试在你的A事件处理程序中触发B事件?如果你再仔细阅读我的帖子,你会发现我选择不触发的原因我想我可能已经理解了你的问题。你是在移动鼠标时移动控件,就像拖动控件一样吗?我知道,我确实保存了它。但是鼠标移动事件根本没有更新。请注意,mouseeventarg是不可变的,因此您需要创建一个新的事件来调用该事件。调用该事件不是问题。我的意思是调用事件有多难,但正如您所说,鼠标移动事件本身是固定的,并且不知道如何更新自身,因为鼠标按下事件正在触发。你能给我一点代码让我开始吗??