2017-12-13 11 views
0

ボタンを押したユーザーの長さを知りたい。私は以下のようにbutton1_MouseDownメソッドを使用しています。しかし、カウント変数は0にとどまっています。タイマーがマウスの下にあるC#

誰かがこの問題を解決してくれますか?

ありがとうございます!

private void button1_MouseDown(object sender, MouseEventArgs e) 
    { 
     foreach(MusKey mk in this.Controls)  
     { 
      if(sender == mk) 
      { 
       if(e.Button == MouseButtons.Left) 
       { 
        timer1.Enabled = true; 
        count = 0; 
        timer1.Tick += new EventHandler(timer1_Tick); 
        timer1.Start(); 
        sp.SoundLocation = (---directory---- + mk.musicNote + ".wav"); 
        sp.Play(); 
       } 
      } 
     } 
    } 

    private void timer1_Tick (object sender, EventArgs e) 
    { 
     count = count++; 
    } 
+0

あなたtimer1_tickは、私はあなたのイベントハンドラは、loadメソッドであるべきだと思う、あなたはuはそれを – Alander

+0

クリックするたびに再バインドする必要がいけない?走るんだから、私はtimer1_Tickのeevntハンドラを必要としないことを言っていますか? loadメソッドにcount ++を入れるべきですか? –

+0

タイマーを使用しないでください。タイムスタンプを保存し、MouseDownが発生したら、MouseUpイベントの期間を計算します。 – Fildor

答えて

3

問題は、ポストインクリメントを使用した割り当てによるものです。

count = count++; 

イベントの順序が割り当て前副作用を含む右辺を評価することである - ので、カウントの現在値が格納されている(= 0)カウントが格納された値が割り当てられる今&をインクリメントされます - 元のゼロの値がインクリメントされた値に書き戻されています。

count ++を使用する必要があります。

private void timer1_Tick (object sender, EventArgs e) 
{ 
    count++; 
} 
+0

ありがとうございました。それは私の終わりからの愚かな間違いでした。 –

+2

私たちすべてに起こります&時には彼らは見つけるのが最も難しい問題です。 – PaulF

+2

@KurtCamilleriそれは、この全体的なデザインはとにかくかなり壊れやすいと言っておく価値があります。しかし、この答えは、少なくともあなたの問題を解決する必要があります。 – Fildor

関連する問題