我在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();
检测是否发生鼠标事件,不知是否合适?
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函数里不就可以么?
的确执行了2次,太感谢了!!
还有,我那个循环,只有鼠标点击了Picturebox1以后才可以继续执行,否则程序等待,
应该怎么写呢??能否用代码详细说明一下??谢了。
public void PictureBox1_MouseDown(object sender, MouseEventArgs e)
{
}
里就可以
程序等待不用你自己控制