2012-08-07 96 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