有关于MouseDown事件里怎么去监听MouseDown有没有被触发
Form上有一个圆点,当我鼠标在Form上点了一点之后,圆点就向我的鼠标点移动,如果这个时候我再点一下,我希望鼠标按照我新点的位置移动,就是说我必须在MouseDown事件里去监听MouseDown是不是再次被触发
请各位高手教教小弟!
------解决方案--------------------你在MouseDown事件里面写上相应的操作代码不就行了 还要监听什么?直接有这个事件
------解决方案--------------------在窗体上加入成员标志
bool IsFirstDown = false;
在MouseDown中判断
if(!IsFirstDown)
IsFirstDown = true; // 当前是第一次按下
else
IsFirstDown = false;
------解决方案--------------------圆点是控件?还是GDI画图?
-----------------
如果圆点是控件(如imageBox),只要分别监听Form和控件的MouseDown
如果是GDI画图,只要在Form类里加一个bool标识变量!
------解决方案--------------------你在MouseDown事件里面写上相应的操作代码不就行了 还要监听什么?直接有这个事件
同意这种意见,直接MouseDown事件里面写就行了
MouseDown事件里的代码的任务就是把圆点移动到鼠标所在处
------解决方案--------------------压根就不存在需要监听的问题~~~~
不过如果你一定要监听,有的是方法,Windows消息也行, 用事件委托也行
------解决方案--------------------lz说的应该是圆点移动的动画效果吧,圆点向鼠标点击位置移动有个过程,比如说在1秒钟内平均速度移动过去。在0.5秒的时候鼠标又在另外一个位置点击了一下,然后要让圆点移动方向改变成朝新的点击位置移动,对不对?
保存2个位置,一个圆点当前位置,一个是鼠标点击位置。每次鼠标点击时记录鼠标点击位置。每隔一段时间(比如说0.1秒)将圆点位置向保存的鼠标点击位置移动一定距离。
------解决方案--------------------至少需要保存2个变量,就是圆点当前位置和鼠标点击位置。如果你不想用定时器每隔一段时间重绘圆点位置的话,循环不能用局部变量判断,要放在Form里作为成员变量。
比如
Form{
Point start;
Point target;
Point current;
int step;
bool isMoving = false;
void MouseClick(MouseEventArgs e){
start = current;
target = e.Point;
step = 0;
if(!isMoving){
isMoving = true;
for(;step < max;step++){
current = GetCurrent(start ,target ,step);
Draw();
sleep(100);//这里用sleep应该不行,换成你自己所实现的定时
}
isMoving = false;
}
}
自己看下可不可以改,最好要加上同步。
------解决方案--------------------想法:
圆点移动需要另外启动一个线程
这个线程和界面的UI线程进行交互
交互的数据就是你点击位置
新线程每移动一步
都根据UI线程中通过MouseClick事件的得到的新的位置进行方向调整
然后在移动,直到与点击位置重合
------解决方案--------------------你是怎么绘图的,用自己写的线程还是用Timer控件定时控制?
我想你不会是用简单的for循环来控制吧??
无论是线程还是Timer,过程应该是
1.MouseDown事件接收到鼠标的点击事件;
2.判断绘图线程是否启动(即判断绘图标志是否启动 if(!drawing) ),如果没有启动,那么开始启动绘图线程,设置绘图标志为正在绘制的状态 drawing = true,同时在全局变量(可以设置为静态)中记录目标的位置X和Y; 如果已经启动,那么重新设置X,Y的值,线程应该会根据X,Y的值重新计算移动的方向并移动.
3.移动到目标点,设置drawing = false,等待下一次的命令
------解决方案--------------------中途有点了自动就会停止当前动作处理新的移动事件了
要全局变量判断第几次干什么?
------解决方案--------------------设置个标志嘛
比如弄个GUID表示最后次鼠标点击生成的标志,循环移动的时候判断这个标志
窗体类里面申明一个
private string id;
mousedown:
id = Guid.NewGuid().ToString();
move:
string oldid = id;
while(oldid == id)
{
.......
}
------解决方案--------------------你代码怎么写的 最好贴一下
如果x y存在全局里面还是不需要bool变量的
------解决方案--------------------你是直接用Form的sleep()吗?那样不行,线程停了就不会响应click事件了。
要另外起个线程,用VS提供的定时器好了。
------解决方案--------------------aaajedll() :