みおすなちゃんのお部屋

みおすなのゲーム、趣味、そのほかの出来事について書いていきます。日によってはマジで薄い記事になるかもしれませんが、ご了承ください。

C#フォームで少し早めの間隔でクリック処理がしたい

ふとBPMを測定するやつが欲しいと思い、その勢いでささっと製作。

 

――――って感じで意識高い系のブログみたいにできたらいいな~~~。

 

もちろん壁にぶち当たります。

何かというと、C#フォーム上で連続に一定の速度(BPM110程度)以上でカチカチしていると2回に1回しか反応しなくなる現象が起きます。
これは、C#フォーム上のイベントで「ダブルクリックと同じ扱いを受けている」からだと判明するまで割と試行錯誤しました。ダブルクリック時のイベントでは何も定義されていないため何も起きません。普通のクリックイベントには飛ばないのですね。
これを解決するには、ストップウォッチのリスタートをダブルクリック時のイベントの処理にコピーすれば解決します。
コードが汚いのはごめんなさい

        private void Form1_MouseClick(object sender, MouseEventArgs e) {

            timeSpan = Stopwatch.Elapsed;
            if (started) {
                BPM.Text = timeSpan.TotalSeconds.ToString();
                Stopwatch.Restart();
            } else {
                Stopwatch.Start();
                started = true;
            }
        }

        private void Form1_MouseDoubleClick(object sender, MouseEventArgs e) {

            timeSpan = Stopwatch.Elapsed;
            if (started) {
                BPM.Text = timeSpan.TotalSeconds.ToString();
                Stopwatch.Restart();
            } else {
                Stopwatch.Start();
                started = true;
            }

めでたしめでたし。