• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ボタン操作)

連続してボタンを押すと多重実行されてしまう問題の解決方法

このQ&Aのポイント
  • VC++2008ExpressEditionを使用してプログラムを作成し、ボタンを連続して押すと多重実行される問題が発生しています。
  • 解決方法として、関数内でフラグ変数を使用し、多重実行を防止する手法があります。
  • また、関数が実行中はボタンを無効化し、自分で作成したアイテムを操作できないようにすることで解決できます。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

イベント内でループをしているため メッセージポンプが機能しないのが原因でしょう そのため ボタンのClickメッセージがWindowsのメッセージキューに残ってしまい Clickイベントが終了してからもう一度呼ばれるといったことが繰り返されます forループの中で Application::DoEvents() を実行するようにしてみましょう     for(i=0;i<200;i++){       int t=clock();       while(10>clock()-t);       textBox4->Text+=L"aaraeaewa"+i+L"\r\n";       textBox4->SelectionStart = textBox4->Text->Length;       textBox4->ScrollToCaret();       // これを追加 ClickイベントなどのWindowsメッセージを処理       Application::DoEvents();     }

glarelance
質問者

お礼

解答有り難うございました 確かにこのようにすると、再描画がかけられるのでできました。

その他の回答 (2)

回答No.3

蛇足な追記。    static bool flug=false; 「何かの目印」と言う意味での変数なら、変数名は「flug」ではなく「flag」です。

回答No.2

>この関数を実行中は多重実行されないことを想定しているのですが、やってみると多重実行されてしまいます。 余計なフラグ判定が原因。     static bool flug=false;     if(flug)return;     flug=true; と     flug=false; を削ってみましょう。 ボタン1が押された瞬間、関数の入り口でボタン1のEnabledをfalseにすれば、処理が終わるまで「押そうと思っても絶対に押せない」ので、多重実行はしない「筈」です。 もちろん、関数の出口でEnabledをtrueに戻すのも忘れないように。 要は、自分自身のEnabledプロパティが再入フラグの代わりになるのです。

glarelance
質問者

お礼

解答有り難うございます。 このフラグは無くて出来なかったから付けたものなので付いていても消えていても、無理でした。

関連するQ&A