2011-12-30 12 views
2

私はC#でピアノを開発しています。C#Foreachステートメント

私は私のプログラムで次のコードを持っている:

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イベントがその単一のキー・プレスに対して2回実行されるということです。同様に、同じキーが5回(必ずしも連続しているとは限りません)押された場合、mk.MouseUpイベントは、その単一キーの押下に対して5回実行されます。

私がしたいことは、すべてのMusKey mkではなく、すべてのMouseDownイベントに対してforeachループを実行することです。 MusKey mkが押されたプログラムを "覚えている"ようには思いません。

どうすればいいですか?

答えて

3

マウスを押すたびにイベントが配線されます。別の場所(Loadイベントなど)でイベントハンドラを一度割り当てます。

MouseUpイベントをすべてのキーに接続する際にアプリケーションが起動したときに、そのイベントが1回だけ発生することが保証されているとは限りません。

もっと精巧なことをしている場合は、イベントハンドラが問題のイベントに既に接続されているかどうかを評価する必要があります。

+0

は非常に非常に非常にありがとうございました:) :): )問題はあなたの助けを借りて解決されました:) – Clayton

+0

@Clayton - 問題はありません、あなたのピアノプログラム(ピアニスト、自分自身で20年以上)で幸運です。 –

+0

ありがとうありがとうございます:)お祝いの季節には最高です:) – Clayton

0

なぜMouseDownイベントで使用するのですか?マウスがダウン

ロード・ウィンドウ内のすべてのbottunためMouseEventHandlerをしなければならないときは、MusKeyに二MouseEventHandlerを追加

私はこのヘルプを願っ

+0

ありがとう非常に非常に非常に非常に:) :) :)問題あなたの助けを借りて感謝しています:) – Clayton

関連する問題