Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Foreach语句_C#_Events_Foreach_Event Handling - Fatal编程技术网

C#Foreach语句

C#Foreach语句,c#,events,foreach,event-handling,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 +

我正在用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事件执行foreach循环。我不想让程序“记住”按下了哪个MusKey mk


我该怎么做呢?

每次按下鼠标时,您都在连接事件。在不同的位置(如加载事件)分配事件处理程序一次

我认为,当应用程序启动时,为所有键连接所有
MouseUp
事件,并保证它们只被触发一次,没有任何害处


如果您正在进行更详细的操作,则需要评估事件处理程序是否已连接到相关事件。

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

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


我希望能得到你的帮助

非常非常非常感谢:)::)多亏你的帮助,问题才得以解决:)@Clayton-没问题,祝你的钢琴项目好运(我自己当了20多年的钢琴家)。非常感谢:)节日快乐,万事如意:)@Clayton如果你满意的话,你可以将此作为答案;)非常非常非常非常感谢你的帮助,问题已经解决了