C#Foreach声明

时间:2011-12-30 09:26:47

标签: c# events foreach event-handling

我正在用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被按下了。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

每次按下鼠标时,您都会对事件进行连线。将事件处理程序分配到不同的位置(如Load事件)。

当应用程序启动时,我认为连接所有密钥的所有MouseUp事件都没有任何损害,只能保证它们只被触发一次。

如果您正在做更精细的事情,则需要评估事件处理程序是否已连接到相关事件。

答案 1 :(得分:0)

为什么要在MouseDown事件中使用它!鼠标按下时,你向MusKey添加第二个MouseEventHandler

你必须为加载窗口中的所有bottun制作MouseEventHandler

我希望得到这个帮助