プログラム実行中にコマンドボタンの動作を視覚的に表すには?

解決


ぎっち  2003-05-20 03:30:40  No: 107175

長い処理(ループ処理)を中断する為にキャンセルボタンを作ったのですが、クリックしても押したアクション(ボタンが引っ込む)がないので、押したかどうかわからずに何度も押してしまいます。しかし、処理的にはちゃんと処理のキャンセル(ループを抜ける)をしてくれます。

キャンセルボタンは始めはフォーム上で非表示になっており、処理を実行した後に表示させるようにしています。
このような場合に、クリック動作を起こさせるにはどうすればいいのでしょうか?
用語がよくわからないので文章がちょっと変で申し訳ありません。
どうぞよろしくお願いします。


たかみちえ  URL  2003-05-20 04:55:46  No: 107176

ループの途中にDoEventsを入れると、解決する可能性があります。

> キャンセルボタンは始めはフォーム上で非表示になっており、処理を実行した後に表示させるようにしています。
  あと、こういう場合、ボタンを非表示にしたりするのは、好ましくないと思います。
  この場合は、ボタンを使えないときには淡色表示にするべき(Enabledプロパティ)でしょう。

  なるべくボタンの表示/非表示を切り替えない、そういうソフト、あんまり見ないでしょう?


ぎっち  2003-05-20 18:29:16  No: 107177

たかみちえさん、お返事ありがとうございます!
DoEventsについてですが、すでに入っているんです。
現象を詳しく説明すると、1回目のキャンセル時はボタンが引っ込まないのですが、その後「処理を中止しますか?」のダイアログBOXを表示後、処理続行を選択すると、次回のキャンセルからボタンが押せるようになるんです。

> あと、こういう場合、ボタンを非表示にしたりするのは、好ましくないと思います。
そうだったんですか!他にもプログレスバーも非表示にしてあって、キャンセルボタンと同時に表示するようにしていました。
このような場合別フォームを作成するなどしたほうがいいのでしょうか?


Say  2003-05-20 19:31:52  No: 107178

例えば、実行ボタンとキャンセルボタンを用意し、
初期状態で実行ボタンのEnabled=True,
キャンセルボタンのEnabled=Falseにしておきます。
実行ボタンのクリックイベントプロシージャの先頭で
実行ボタンのEnabled=False,キャンセルボタンのEnabled=Trueに設定します。
キャンセルボタンのクリックイベントプロシージャの先頭で
キャンセルボタンのEnabled=Falseに設定し、
実行ボタンのクリックイベントプロシージャ内の
ループを中断してExit Subする直前で実行ボタンのEnabled=Trueにします。
また、ループが正常に終了し、実行ボタンのクリックイベントプロシージャを
抜ける直前で実行ボタンのEnabled=True,
キャンセルボタンのEnabled=Falseに設定します。

このように制御すれば、ボタン表面の文字の色で
現在行われている処理、可能な処理がわかります。

さらに親切にしたいなら、状態表示用のLabelを用意し、
「実行ボタンクリックで処理を開始します。」
「処理実行中・・・キャンセルボタンクリックで処理中断します。」
「処理中断中・・・しばらくお待ちください。」
「処理は正常に終了しました。」
等の表示を行えばいいでしょう。

>このような場合別フォームを作成するなどしたほうがいいのでしょうか?
デザイン上の問題です。そのほうが見栄えや操作性がよくなるようなら
作成してもいいでしょう。


ぎっち  2003-05-20 20:57:12  No: 107179

たかみちえさん、Sayさんありがとうございます!
たかみちえさんのご指摘のようにDoEventsを入れて(入れるところ間違ってました。)、Sayさんのご意見を参考に制御したらうまくいきました!
ラベルも貼ってかなり見栄えがよくなりました。
みなさまありがとうございました!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加