- PR -

長い処理中にボタンを複数回クリック

投稿者投稿内容
るぱん
会議室デビュー日: 2003/07/28
投稿数: 5
投稿日時: 2005-04-21 13:43
はじめまして。るぱんと申します
現在作成中のプログラムで以下のような処理を
行っています。
private void button1_Click(object sender, System.EventArgs e)
{
this.button1.Enabled = false;
System.Threading.Thread.Sleep(2000);
System.Diagnostics.Trace.WriteLine("in");
this.button1.Enabled = true;
}
上記の処理でボタンがクリックされてボタンが使用不可な
状態にしているにも関わらず、処理中にボタンがクリックされると
前の処理が終わった直後にまた処理が行われてしまいます。

処理中にボタンが押されても処理を無効化するためにはどうしたら
よいのでしょうか?
ご教授よろしくお願いします

渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-04-21 14:01
引用:

処理中にボタンが押されても処理を無効化するためにはどうしたら
よいのでしょうか?



あまりいい方法は無いです。

なので、長い時間のかかる処理を行う時は、「処理中(や進捗)」の表示を行うダイアログを出して、処理の中断ボタンくらいしか操作が出来ないようにデザインされたアプリケーションが多いのです。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-04-21 14:07
Webでしょうか?Winでしょうか?
Webであれば、アイデアが無くもない…
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2005-04-21 14:18
今日は。

処理が終わるまでボタンを非表示にするって方法は? 
_________________
Inspired Ambitious
ISMS Assistant Auditor
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2005-04-21 14:20
まゆりんです。

1回しか通さない処理(例えば承認処理とか)ならば、フラグを設けて2回目以降はスルーさせてしまうという方法もあります。
_________________
まゆりん @ わんくま同盟
Blog る。
るぱん
会議室デビュー日: 2003/07/28
投稿数: 5
投稿日時: 2005-04-21 14:43
るぱんです


直接的な解決方法はないようですね。。

この処理はwinアプリで検索を行うボタンです。

渋木さんのおっしゃられた方法で切り抜けたいと思います。
みなさまご回答ありがとうございました。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-04-21 21:23
引用:

るぱんさんの書き込み (2005-04-21 13:43) より:
private void button1_Click(object sender, System.EventArgs e)
{
this.button1.Enabled = false;
System.Threading.Thread.Sleep(2000);
System.Diagnostics.Trace.WriteLine("in");
this.button1.Enabled = true;
}


this.button1.Enabled = true;
の直前に
Application.DoEvents();
するという手もあります。
※なんでEnabled = falseが思ったように働かないのか考えてみましょう。

ただし、無効になっていないイベントはその場で実行されることになるので、
その辺は問題が起こらないように考えて実装する必要はあります。
るぱん
会議室デビュー日: 2003/07/28
投稿数: 5
投稿日時: 2005-04-22 09:13
引用:

なちゃさんの書き込み (2005-04-21 21:23) より:
this.button1.Enabled = true;
の直前に
Application.DoEvents();
するという手もあります。
※なんでEnabled = falseが思ったように働かないのか考えてみましょう。

ただし、無効になっていないイベントはその場で実行されることになるので、
その辺は問題が起こらないように考えて実装する必要はあります。



お返事ありがとうございます。
Application.DoEvents();
を行っても結果は同じでした

スキルアップ/キャリアアップ(JOB@IT)