VisualStudio(Standard)でC#の勉強をしている者です。よろしくお願いします。
エクスプローラでファイルをコピーすると、ファイルが飛ぶ絵が表示されて、そこのキャンセルボタンをクリックするとコピーが中断しますが、それと同じ事を行うにはどうしたらよいか、以下のようなコードで試してみました。
Form form = new Form();
form.Show();
for (int i = 0 ; i < 1000 ; ++i)
if (form.Stop)
break;
//====================
class Form {
public bool Stop = false;
private void Cancel_Click() {
Stop = true;
}
}
ループに入る前にキャンセルボタンを配置したフォームをShow()しておいて、ループ中にキャンセルがおされてStop=trueになったらループを中断する、というようなことを考えました(上記コードは概要だけを表していて、実際には別のコードで試しました)。ただ、このコードではフォームのキャンセルボタンをクリックしても、クリックのイベント自体が発生していないのか、ループを止めることはできませんでした。
上記のような事をするにはどのようにすれば良いのでしょうか。ご存じの方がいらっしゃったらご教授をお願いいたします。
No.1ベストアンサー
- 回答日時:
★ループの中でメッセージ処理を行えばよい。
・キャンセルボタンを押してもループを止める事が出来なかった理由は、ループ中に
メッセージを処理していないためです。このため、キャンセルボタンを押した信号が
出てもループ処理中なのでメインのプロシージャで Cancel_Click 関数が呼ばれなかった
のです。
・私は C# は名前程度しか知らないため実装例を紹介できません。
参考になればと思い C言語での処理をサンプルとして載せます。
サンプル:
MSG msg;
while ( PeekMessage(&msg,hWnd,0,0,PM_REMOVE) ){
if ( !IsDialogMessage(hWnd,&msg) ){
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
その他:
・C# でもメッセージを処理する関数(メソッド)などがあると思いますので調べてみて下さい。
検索キーワードは『DoEvents』で探すと見つかると思います。
下に1つだけ紹介します。→おそらく DoEvents() メソッドを使えば Cancel_Click 関数が
呼ばれるようになってキャンセルできるようになると思います。
・以上。参考に。
参考URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/136 …
ご回答いただき、ありがとうございます。教えていただきましたDoEvents()をループの中に入れることでキャンセルすることができました。非常に勉強になりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
エクセルの当番表を作っていま...
-
ネットワークループとルーティ...
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
-
画面を強制的に再描画させる方法
-
【VBA】指定の範囲から特定の文...
-
while(*s++=*t++)の判定は?
-
イベントの発生を待つ
-
Escキーを押すと、中断する時と...
-
GIFアニメをループさせたくない
-
UWSCの終了の仕方
-
「VC++6」ウィンドウの再描画
-
Java 南京錠
-
EXCEL VBA(初心者)印刷ルー...
-
磁気ループ装置の仕組みと作り方
-
VBA Dir関数でファイルをループ...
-
重複データをテーブルに表示し...
-
一巡伝達関数と開ループ伝達関数
-
CreateJS(TweenJS)での連続した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
-
アクティブセルから、A列最終行...
-
DoEventsが必要な理由について
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
流れ図(フローチャート)が分か...
-
乱数の桁数指定、または範囲指定。
-
テキストボックスの名前に変数...
-
CSVファイルの特定の行だけを読...
-
vb.netです。2次元配列の要素を...
おすすめ情報