2014-01-22 17 views
0
void MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    Mouse.Capture(this.eventSource); 
    BlockA(); 
} 

void MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.LeftButton == MouseButtonState.Pressed) 
     BlockB(); 
} 

確保BlockA()始終在BlockB()之前運行?我在WPF下使用C#。我遇到了一個奇怪的bug,只發生在某些系統上。我懷疑事件順序很重要,但我在MSDN上找不到有關此事的文章。謝謝。在MouseMove之前的MouseDown始終保證在C#WPF中?

回答

5

否。如果按鈕被按下窗外,然後移動到裏面,然後它會觸發。你應該設置一個布爾值來知道你抓住了鼠標。

1

我已經找到了WinForm的事件順序,但我想這是在WPF Mouse Event in Windows Form

相同的,如果你想處理鼠標點擊事件以正確的順序,你需要知道的順序單擊事件在Windows窗體控件中引發。所有Windows窗體控件在按下並釋放鼠標按鈕(不管鼠標按鈕是哪個按鈕)時按相同的順序提高點擊事件,除了下面列出的各個控件的列表。以下列表顯示了單個鼠標按鈕單擊事件的順序: MouseDown事件。
點擊事件。
MouseClick事件。
MouseUp事件。

爲雙擊鼠標按鈕點擊引發的事件順序:
MouseDown事件。
點擊事件。
MouseClick事件。
MouseUp事件。
MouseDown事件。
DoubleClick活動。
MouseDoubleClick事件。
MouseUp事件。

+0

請寫出總結的答案,或者您發佈將可能刪除/轉換髮表評論。 –

+0

問題是關於WPF而不是WinForms – sam

1

而不是MouseLeftButtonDown你可以使用PreviewMouseLeftButtonDown evet來達到你的要求。

問候, Riyaj艾哈邁德我

2

Mouse.Capture(this.eventSource);導致MouseMove事件。

BlockB()之前一直執行BlockA(),改變MouseLeftButtonDown()這樣:

void MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    BlockA(); 
    Mouse.Capture(this.eventSource); 
} 
相關問題