各位好,我最近在实现一个控制系统,控制系统的主界面上有四个按钮btnforward、btnback、btnleft、btnright,现在,需要实现的功能是,鼠标按下btnforward按键时,控制设备前进,鼠标抬起时,控制设备停止。
我的实现方法是:在btnforward的mousedown事件中,将一个布尔型的变量btnforwardisdown设置成true。然后,启动一个循环,让伺服按照固定的脉冲前进,循环的条件是btnforwardisdown变量,代码大致如下:
while(btnforwardisdown)
{
      当前位置+=固定脉冲数;
      ....
}然后,在btnforward的mouseup事件中,将btnforwardisdown设置成false,这样循环就会终止。同时执行停止逻辑,大致代码如下:
btnforward=false;
停止逻辑....但是,设备能前进,却停止不了,因为btnforward的mouseup事件没捕获到,我加断点,单步跟踪的时候,却能够触发mouseup事件。
请问各位谁知道是怎么回事?感谢各位!鼠标事件捕获MouseUpMouseDown

解决方案 »

  1.   

    你这么做在btnforward的mousedown事件执行时已经进了一个死循环了,mousedown结束不了,怎么会激活mouseUP事件呢,简单点可以考虑用个定时器,按下鼠标的时候启动定时器,让设备移动,松开鼠标时则停止计时器。定时器可以指定一个时间间隙让设备移动一次。
      

  2.   

    2楼的方法不错,可以考虑,我的问题已经解决了,解决方法是这样的:我在btnforward的mousedown事件中开启一个线程t1,让线程t1去执行循环。然后在btnforward的mouseup事件中开启另一个线程t2,让t2去改变变量btnforwarddown的值以及停止运动。
      

  3.   

    Button b;  b.MouseEnter,  b.Capture , b.MouseLeave, Control.MouseButtons, Control.MousePosition从原始需求看,感觉应该用这几个东西来做