- - PR -
C# トグルボタン(Start/Stop)を作成する方法
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-21 13:33
ひとつのボタンでStart処理、Stop処理を交互に切り替えることができるようにしたい。
Start処理およびStop処理に時間がかかる場合、Start処理およびStop処理が完了するまでの期間Clickイベントがキューされるのを禁止したい。ボタンのClickイベントを一時的に無効にする良い方法は無いでしょうか? 現状では、Start処理中およびStop処理中のClickイベントが全てキューに入ってしまうので、ボタンが押された回数だけ際限なく処理が実行されてしまいトグルボタンとして正常に機能しません。 bool _hasStart = false; private void buttonStart_Click(object sender, System.EventArgs e) { buttonStart.Enabled = false; if(_hasStart) { // Stop処理中はClickのキューイングを無効にしたい Stop(); } else { // Start処理中はClickのキューイングを無効にしたい Start(); } _hasStart = _hasStart ? false : true; buttonStart.Enabled = true; } 追記 VS2005は標準コントロールの機能強化が図られているそうですが、 トグルボタンのような機能は用意されているでしょうか? | ||||||||||||
|
投稿日時: 2006-02-21 13:39
トグルボタンであれば、チェックボックスのAppearanceプロパティをButtonに設定することで実装できます。
[追記] VS2005表記を見落としていました。 上記はVS2003でのことなのでおそらく2005でも可能だとは思うのですが・・・。 _________________ うちうせん@SE見習い [ メッセージ編集済み 編集者: うちうせん 編集日時 2006-02-21 13:41 ] | ||||||||||||
|
投稿日時: 2006-02-21 14:21
の直前に
を入れれば元の構造のままならばOKですけど、その間UIが止まることは避けられません(これはつまり「反応しない」とかXPとかだと出るということです)。 なのでEnabled = falseにした後は非同期にしてメッセージループに戻してあげましょう。幸い2005だとだいぶ簡単で、
のように、匿名メソッドを使えば余計なメソッドを作る必要はありませんし。 非同期が不可能であったり、それほど時間のかかる処理でないならば始めに言ったようにApplication.DoEvents()を呼び出してください。 | ||||||||||||
|
投稿日時: 2006-02-21 22:00
ん〜?なんか、本当に期待した意味でトグルしているのかなぁ???
単純には、Enabled = false の間に、キューされているメッセージをすべて実行させてやればいいです。 しかし、例えばストップウォッチの「スタート/ストップ」ボタンを連続的にクリックするようなものですよね。そのままで十分だと思いますけど? (別スレッド化の処理はすでに実装されていると仮定し、スレッドを分けるのが、そんなに時間を食う処理だとは思わないので) 実際には、、、 クリックする ↓ 処理が実行される→処理が終わる この間にクリック ↓ ストップボタンになる ↓ またスタートする(本当はストップしたい) になるとか? 〆 written by Jitta@わんくま同盟 on 2006/02/21 □ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006 | ||||||||||||
|
投稿日時: 2006-02-23 15:12
皆さん、ご回答ありがとうございます。
とりあえずApplication.DoEventsである程度改善できましたが、 完全を求めるなら別の方法を試みる必要があると感じました。 > トグルボタンであれば、チェックボックスのAppearanceプロパティをButtonに設定することで実装できます が理解できていません。 お手数ですがもう少し解説していただけないでしょうか? | ||||||||||||
|
投稿日時: 2006-02-23 15:31
リファレンスの CheckBox.Appearance プロパティ にある「解説」を参照してください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1