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,将其假只有当你提起它,并显示喔呀,如果值是真的。如果我断开鼠标按下事件来检查值,这是真的,如果我从那里继续显示消息。如果我不休息,它什么也不做。这里有什么其他工作吗?

编辑: 简要说明:我很难解释我真正想要完成的事情,但想象一下就像将文件从窗口拖出一样。我需要简单地能够识别用户何时点击列表框内部,然后拖出列表框,如果有意义的话

+0

打破该事件是什么意思? – 2011-04-15 20:32:04

这个怎么样?

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发布之前控制不剩,但请注意的是,拖出部分将出现不止一次,所以你可能会希望有一个标志设置第一时间......并且在鼠标上清除该标志或离开

+0

这需要调整一下我想要的东西,但这基本上是我需要的。谢谢一堆。 – Nick 2011-04-18 12:17:57

对于每次鼠标单击,您的MouseDown事件都会触发,并且您的MouseUp事件将触发,因此如果按在列表框的鼠标按钮,将光标移出而不释放按钮,将焦点切换到另一个窗口(如Visual Studio中)的操作顺序等同于

itemHeld = true; 
itemHeld = false; 
if(itemHeld) 
    MessageBox.Show("yay"); 

是什么触发MouseLeave事件火。这就是为什么当你正在调试时你会看到弹出的消息框。

我不确定你想要完成什么,所以我不能推荐其他解决方案。

+0

我在吉他上见过你:) – 2011-04-15 20:33:27

+0

@André我使用几个不同的SE网站。 :) – 2011-04-15 20:34:24

+0

互联网是这样一个小地方吗?看到你 – 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"); 
} 

The output will be