2011-04-15 78 views
0

我很困惑。我基本上試圖告訴用戶什麼時候點擊了列表框中的某些東西,拿着按鈕,然後離開列表框。下面是我在做什麼有點簡單化了版本: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

回答

1

這個怎麼樣?

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

1

對於每次鼠標單擊,您的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

2

您不能通過斷點來調試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