我正在用c#开发一架钢琴。
我的程序中有如下一段代码:
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
mn1 = new MusicNote();
foreach (MusKey mk in this.panel2.Controls)
{
if (sender == mk)
{
//code
mk.MouseUp += new MouseEventHandler(this.panel1_MouseUp);
}
}
}
此事件的作用是创建一个音符,并在用户释放鼠标按钮时调用MouseUp事件处理程序。
我的问题是,如果第二次按下相同的音乐键(MusKey),则mark . mouseup事件将为该单键按两次执行。同样地,如果同一键被按第五次(不一定是连续的),mark . mouseup事件将为该键被执行五次。
我想做的是执行foreach循环不是为每个MusKey mk,而是为每个MouseDown事件。我不希望程序"记住"按下了哪个键。
我该怎么做?
每次按下鼠标时都将事件连接起来。在不同的位置分配一次事件处理程序(如Load事件)。
在应用程序启动时,以保证它们只触发一次的方式连接所有键的所有MouseUp
事件,我认为没有任何危害。
如果您正在做一些更复杂的事情,您将需要评估事件处理程序是否已经连接到所讨论的事件。
为什么在MouseDown事件中使用它!当鼠标按下
时,向MusKey添加第二个MouseEventHandler你必须为所有的加载窗口底部设置MouseEventHandler
i wish this help