DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ボタンでオートリピートしたい

環境/言語:[WindowsCE6.0、.NETcompactFramework3.5、VisualStudio2008、C#]
分類:[.NET]


・開発環境
 WindowsCE6.0
 .NETcompactFramework3.5
 VisualStudio2008
 C#

・質問
 お客様からボタンを押下し続けている間、キーのオートリピートのように
 機能し続けてほしいとの要望があり、困っています。
 ボタンを押下したらイベントは1回しか発生しないため
 通常では無理かと思っています。
 なんとかできる方法はありませんでしょうか?

・案
 clickイベントはボタンを離したときに発生するので、
 なんとかボタンを押したときのイベントも取得し(取得の仕方はわかりません)、
 押し始めてから離すまでの期間を検出する。
 その期間内にて、定期的にやりたい処理を実行する(スレッドかな?)。
■No32163に返信(kikuさんの記事)

MouseDownでフラグをたてMouseUpでフラグを落とす
Timerイベントでフラグが立っていれば処理を行う

とか。
> MouseDownでフラグをたてMouseUpでフラグを落とす
> Timerイベントでフラグが立っていれば処理を行う

shuさん回答ありがとうございます。
なるほど、Mouseイベント使うアイデアはいけそうですね。
ありがとうございました。
性能までちゃんとでるかはわかりませんが、
なんとか先に進めれそうです。

解決済みとします。
解決済み!
■No32163に返信(kikuさんの記事)
>  ボタンを押下したらイベントは1回しか発生しないため
>  通常では無理かと思っています。

Click ではなく、MouseDown/Up のイベントは取れますよね。

下記は Compact Framework 3.5/C# の話ではなく、
VB6 の場合のサンプルですが、考え方としては同じかと。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=10296

VB.NET での似たような話。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=52350&KLOG=88

C# でオートリピートボタンを作る話。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=10826&KLOG=24

System.Windows.Controls.Primitives.RepeatButton クラス。今回は使えないけど。
http://msdn.microsoft.com/ja-jp/library/ms746649.aspx
ボタン上ではMouseDownイベントとMouseUpイベントが発生しないことがわかりました。
よくよく考えてみると確かにそうでした。

wndprocをオーバーライドする必要があるのでしょうか?
魔界の仮面弁士さん調査頂きありがとうございます。
リンク先に目を通してみます。

DOBON.NET | プログラミング道 | プログラミング掲示板