2012-04-23 88 views
1

我創建了一個新的WinForm。 在那個WinForm中我放了一個Panel。 Dock =填充。面板上的MouseUp?

運行該項目。
DoubleClicked上的形式的報頭(最大化)

獲取一個mouseUp事件面板上:

功能:WindowsApplication1.Form1.Panel1_MouseUp(對象, System.Windows.Forms.MouseEventArgs),主題:0x2068主線程

它是一個錯誤或功能? ))

我明白,當我雙擊面板的某個部分來了一下鼠標,但我沒有在面板上的任何mouseUp,但??

我的問題: 我在我的面板中有一些可以選擇或不可以選擇的對象。 當我點擊(的MouseUp)面板(在「空」的空間,免費OBJETS的)上,通常情況下,我取消選擇所有對象。

但在最大化情況下,我應該保持對象選擇不變!

如何「過濾」MouseUp的最大化情況?

+0

Tomer W是對的。但也許你可以先在面板上尋找MouseDown事件?因爲沒有mouseDown沒有mouseUp? – basti 2012-04-23 11:47:22

+0

MouseUp是特定的,因爲打開上下文菜單,我需要在裏面使用一些檢查... – serhio 2012-04-23 11:48:24

+0

:)喜歡你對GUI的態度。0ld-5ch00l 快速編輯一鍵菜單? – 2012-04-23 12:27:01

回答

2

以及你完美

  1. 的MouseDown描述它放在標題
  2. 的MouseUp在標題
  3. 的MouseDown在標題
  4. 窗口最大化,現在的鼠標在窗體上。
  5. 的MouseUp上的形式。

即使你是正確的,而這種行爲是非常惱人的和無用的, 這是怎樣的邏輯上應。

我建議避免的MouseDown /的MouseUp儘可能多的可能。 儘可能使用MouseClick/DblClick。

問候,

編輯:

我對你有兩個想法:

跟蹤的MouseUp沒有的MouseDown。下面的MouseUp

private bool bMouseDownState = false; 

private void Form1_MouseDown(object sender, MouseEventArgs e) 
{ 
    bMouseDownState = true; 
} 

private void Form1_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (!bMouseDownState) 
     return; 
    bMouseDownState = false; 
} 

通知最大化事件和漠視。

但是,這是一個棘手的時候幾乎是最大化的窗口(這不會導致鼠標了!)

終於不顧跟隨鼠標向上(取消選擇對象)。

* 最後一個 - 爲什麼要發明輪子? * 使用已經制作的畫布(visio?)

+0

看到我的更新。不幸的是,我不能在我的案例中使用MouseClick – serhio 2012-04-23 11:46:30

+0

爲什麼第二個MouseDown調用DoubleClick事件,而不是第二個MouseUp? – serhio 2012-04-23 11:51:51

+0

鼠標點擊由MouseDown事件定義,並且在某些情況下由MouseUp在相同位置確認... 在桌面圖標上的鼠標一般感覺就像選擇它(考慮到焦點在桌面上)... – 2012-04-23 12:24:10