我正在用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),则mk.MouseUp事件将为该单键按下执行两次。同样,如果第五次按下相同的键(不一定是连续按下),则按下单键按键会执行五次mk.MouseUp事件。
我想要做的是为每个MusKey mk执行foreach循环,但是对于每个MouseDown事件。我不希望程序“记住”哪个MusKey mk被按下了。
我该怎么做?
答案 0 :(得分:3)
每次按下鼠标时,您都会对事件进行连线。将事件处理程序分配到不同的位置(如Load事件)。
当应用程序启动时,我认为连接所有密钥的所有MouseUp
事件都没有任何损害,只能保证它们只被触发一次。
如果您正在做更精细的事情,则需要评估事件处理程序是否已连接到相关事件。
答案 1 :(得分:0)
为什么要在MouseDown事件中使用它!鼠标按下时,你向MusKey添加第二个MouseEventHandler
你必须为加载窗口中的所有bottun制作MouseEventHandler
我希望得到这个帮助