2012-08-07 122 views
2

該程序的目的是允許用戶通過在屏幕上選擇它們來點亮面板上的多個LED。我在當前構建的按鈕陣列中,用戶必須單獨單擊所有按鈕。該陣列可容納1536個LED,這就是很多的點擊。我希望用戶能夠按住鼠標按鈕並點亮它們交叉的任何LED。我想說的是這樣的:鼠標事件處理程序

buttonArray[row, column].MouseLeave += new System.Windows.Forms.MouseEventHandler(ClickButton); 

再有一個像常規:

private void ClickButton(Object sender, System.Windows.Forms.MouseEventArgs e) 
{ 
    if (e.Button==MouseButtons.Left) 
    { 
     //blah blah 
    } 
} 

這將觸發任何時候用戶鼠標進入到一個按鈕上,然後我會檢查,看看他們是否按住按鈕。現在我收到此錯誤:

Error 1 Cannot implicitly convert type 'System.Windows.Forms.MouseEventHandler' to 'System.EventHandler'.

好像我沒有委託和處理的正確的匹配,或者說我不理解的命名空間的東西......還挺新的C#。我在MSDN上偶然發現了一段時間,並且發現了很多與我的工作相似的示例。

+0

繪圖程序不會爲每個像素使用控件。你的程序只是一個脂肪像素的繪畫程序。停止使用控件,其餘的很簡單。 – 2012-08-07 23:31:47

+0

你將會遇到的一個問題是,當鼠標按鈕關閉時,MouseLeave事件不會被觸發。接收MouseDown事件的控件捕獲鼠標,直到Button被釋放。你真的需要看看漢斯的建議。 – 2012-08-08 00:41:20

回答

0

問題有一個類型。 Click事件通過System.EventArgs。要使用System.MouseEventArgs,您需要綁定到MouseClick事件。

在這種情況下,我會做的是創建一個MouseDown處理程序,該處理程序設置一個私有布爾標誌來表示鼠標到達True,並將MouseUp處理程序設置回False。然後,您將使用MouseEnter處理程序並檢查該標誌是否已設置,如果已設置,則切換或設置窗體上LED指示燈的狀態。然後,您可以將所有這些綁定到這三個處理程序,並且它應該允許您分辨在您進入控制空間時鼠標是否關閉。

編輯:要編輯這一個,因爲我放在一起的例子並不像我想象的那樣工作。去搞清楚。

+0

不錯的想法...聽起來像是會工作,是的,我錯了使用離開事件,輸入更有意義。我的部分問題是,我不明白如何從任何地方扯掉MouseDown處理程序或正確的語法,我不知道'bind'是什麼意思。您絕對看起來在正確的頁面上,感謝您的幫助 – user1583208 2012-08-09 22:06:52