Listbox事件发射奇怪
我很困惑。我基本上试图告诉用户什么时候点击了列表框中的某些东西,拿着按钮,然后离开列表框。下面是我在做什么有点简单化了版本:Listbox事件发射奇怪
private bool itemHeld;
private void listOriginal_MouseDown(object sender, MouseEventArgs e)
{
itemHeld = true;
}
private void listOriginal_MouseUp(object sender, MouseEventArgs e)
{
itemHeld = false;
}
private void listOriginal_MouseLeave(object sender, EventArgs e)
{
if (itemHeld)
MessageBox.Show("OHH YEAH");
}
对我来说,似乎应该把itemHeld真当你按下mousebutton,将其假只有当你提起它,并显示喔呀,如果值是真的。如果我断开鼠标按下事件来检查值,这是真的,如果我从那里继续显示消息。如果我不休息,它什么也不做。这里有什么其他工作吗?
编辑: 简要说明:我很难解释我真正想要完成的事情,但想象一下就像将文件从窗口拖出一样。我需要简单地能够识别用户何时点击列表框内部,然后拖出列表框,如果有意义的话
这个怎么样?
private void listBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.X > listBox1.Width - 1 || e.Y > listBox1.Height - 1 || e.X < 0 || e.Y < 0)
{
Console.WriteLine("drag out");
}
else
Console.WriteLine("mouse move {0}/{1}", e.X, e.Y);
}
它使用的事实mousebutton发布之前控制不剩,但请注意的是,拖出部分将出现不止一次,所以你可能会希望有一个标志设置第一时间......并且在鼠标上清除该标志或离开
这需要调整一下我想要的东西,但这基本上是我需要的。谢谢一堆。 – Nick 2011-04-18 12:17:57
对于每次鼠标单击,您的MouseDown事件都会触发,并且您的MouseUp事件将触发,因此如果按在列表框的鼠标按钮,将光标移出而不释放按钮,将焦点切换到另一个窗口(如Visual Studio中)的操作顺序等同于
itemHeld = true;
itemHeld = false;
if(itemHeld)
MessageBox.Show("yay");
是什么触发MouseLeave事件火。这就是为什么当你正在调试时你会看到弹出的消息框。
我不确定你想要完成什么,所以我不能推荐其他解决方案。
我在吉他上见过你:) – 2011-04-15 20:33:27
@André我使用几个不同的SE网站。 :) – 2011-04-15 20:34:24
互联网是这样一个小地方吗?看到你 – 2011-04-15 20:35:48
您不能通过断点来调试Windows事件,因为当Visual Studio得到活动来进行调试时,鼠标离开事件将被激发用于徘徊控制。
您可以使用Debug.WriteLine将关于调试的信息写入跟踪侦听器。
private void button1_MouseLeave(object sender, EventArgs e)
{
Debug.WriteLine("Mouse leave");
}
private void button1_MouseEnter(object sender, EventArgs e)
{
Debug.WriteLine("Mouse enter");
}
private void button1_MouseHover(object sender, EventArgs e)
{
Debug.WriteLine("Mouse hover");
}
打破该事件是什么意思? – 2011-04-15 20:32:04