ボタンを右クリックし続けている間に指定した関数を実行し続けたいと考えています。
MouseDown.Up等で実装できるかもしれないと思い試してみたのですが長押しにうまく対応することができません。
具体的に「テキストに100と入力されている→ボタンを押す→テキストが99になりラベル0が1になる」処理を長押しでリアルタイムで確認できるように実装したいと考えています。
どうすれば実装することができるでしょうか?ご教授お願い致します。
C#のFormApplicationを使用しています。
実行し続けたいということは中でループが実行されているんだと思います。ループを外からのイベントで終了するのは、CancellationToken を使うのが定石です。またそのループはフォームの動きを止めてしまうので、非同期で行うと良いでしょう。
または System.Reactive を使います。こちらの方が簡単かもしれません。
ご自身が回答に対して試されたことを具体的なコードも出さずに「出来ませんでした。どうやればいいですか?」とだけ聞かれても回答者の方は困るのではないでしょうか?
「テキストに100と入力されている→ボタンを押す→テキストが99になりラベル0が1になる」とのことですが
ボタンを押している間、テキストは1づつ減っていき、ラベルは1づつ増えていくということですか?
それはどれくらいのスピードですか?
ただループで減らす(増やす)のであれば、100くらいであれば一瞬で終わってしまい視認することは無理だと思います。
UI の話なら一瞬で数字がいくつも変わったのでは使いにくいのでタイマー処理は必須でしょうね。それも押し始めと中頃では速度を変える方が使いやすくなると思います。System.Reactive の出番ですね。
>YAmaGNZ
>テキストは1づつ減っていき、ラベルは1づつ増えていくということですか?
それを想定しています。スピードに関しては視認できるものを想定していたのですが厳しいですかね...
>Zuishin
timerの処理調べて試してみます!ありがとうございます。
NumericUpDown+ValueChangedで満足できるならそれが一番簡単です。
タイマーでやるならこちらはどうですか。
[Auto-repeat Button in 10 Minutes - CodeProject](https://www.codeproject.com/Articles/629644/Auto-repeat-Button-in-10-Minutes
回答4件
あなたの回答
tips
プレビュー