C#Foreach语句
我正在用C#开发一架钢琴 我的程序中有以下代码: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 +
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如果你满意的话,你可以将此作为答案;)非常非常非常非常感谢你的帮助,问题已经解决了