2011-01-28 127 views
2

我需要在.NET Framework的標準事件中不存在的事件。例如,當鼠標左鍵向下時,鼠標移動。按下按鈕時移動鼠標會引發什麼事件?

我還需要改變一些行爲。例如,我有一些按鈕,我想在鼠標左鍵關閉的同時更改光標所在的每個背景圖像,但是當我點擊一個按鈕並按住鼠標左鍵時,當我移動鼠標時其他按鈕不會引發任何事件。

我該怎麼辦?我如何創建新的事件?我如何改變行爲?

任何幫助表示讚賞。

+6

這是WPF或Windows窗體? – 2011-01-28 10:27:50

+1

我編輯這個修復你的英文錯誤。 (我希望這不會冒犯你 - 我只是想幫助:))。一旦主持人批准,編輯應該可見。 – 2011-01-28 10:53:38

回答

5

你的問題給出是,當MouseDown事件上的按鈕時,該按鈕「捕獲」鼠標,直到鬆開按鈕不鬆開,這意味着MouseMove事件不會被其他按鈕接收。

有一些代碼from here這可以幫助:

// Assuming all buttons subscribe to this event: 
private void buttons_MouseMove (object sender, MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     { 
     Control control = (Control) sender; 
     if (control.Capture) 
     { 
      control.Capture = false; 
     } 
     if (control.ClientRectangle.Contains (e.Location)) 
     { 
      Control.BackgroundImage = ...; 
     } 
    } 
    } 
3

MouseMove-Event有一個名爲'Button'的屬性,告訴你哪個按鈕被按下。因此,所有你需要做的就是這樣的事情:

void panel1_MouseMove(Object sender, System::Windows::Forms::MouseEventArgs e) { 

    if(e.Button = MouseButtons.Left){ 
     //Do what you want when mouse_move with left button pressed  
    }  
} 

上面的代碼沒有經過測試,我沒有擡頭屬性的正確拼寫等,只要給它一點點嘗試在智能感知/ MSDN。

你可以找到在MSDN甚至更多的信息: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mousemove%28v=vs.71%29.aspx

對於第二個問題,只是試圖找到一個合適的事件或改寫的WindowProc-事件功能那裏你可以聽WindowMessages並獲取你需要 - 更多的信息上http://msdn.microsoft.com/en-us/library/ms633573%28v=VS.85%29.aspxhttp://www.pinvoke.net

相關問題