日期:2014-05-18  浏览次数:20865 次

我点了一次鼠标,MouseDown却执行了两次,很疑惑
我在Picturebox1上点了一下鼠标,PictureBox1_MouseDown 却执行了两次,很疑惑

而且,并不是每次都执行2次,大多数时候执行1次,偶尔执行2次。

bool mousedown;
public void try ()
{  
  PictureBox1.MouseDown += new MouseEventHandler(PictureBox1_MouseDown);  
  //循环等待鼠标事件发生
while (false == mousedown)
Application.DoEvents(); mousedown = false;  
}
public void PictureBox1_MouseDown(object sender, MouseEventArgs e)
{
  PictureBox target = (PictureBox)sender;
  target.MouseDown -= PictureBox1_MouseDown;  
  mousedown = true;  
}
public void Play()
{  
  mousedown = false;  
  for (int i = 0; i < 10; i++)
  {
  try ();
  其他操作
  }
}

另外,我想让发生鼠标事件之后在执行一些操作,所以我用
while (false == mousedown)
  Application.DoEvents();
检测是否发生鼠标事件,不知是否合适?

------解决方案--------------------
不明白你为什么要这么写
估计是委托链的问题

你将
PictureBox1.MouseDown += new MouseEventHandler(PictureBox1_MouseDown); 
执行两遍他就会在你点一下鼠标时触发两次你的回调函数,

也没有必要使用
//循环等待鼠标事件发生 
while (false == mousedown) 
Application.DoEvents(); 
来等待,其实在你注册事件后系统本身也不会停下来

另外,我想让发生鼠标事件之后在执行一些操作,所以我用 
while (false == mousedown) 
Application.DoEvents(); 
检测是否发生鼠标事件,不知是否合适?

直接放在PictureBox1_MouseDown函数里不就可以么?
------解决方案--------------------
直接把要执行的代码放到
public void PictureBox1_MouseDown(object sender, MouseEventArgs e) 

。。。

里就可以
程序等待不用你自己控制
------解决方案--------------------
PictureBox1_MouseDown改为PictureBox1_clientclick试试