電子書籍の厳選無料作品が豊富!

次のプログラムでButton1を押さないで×を押すと仕事を残して終了した事になり,PCの調子が悪くなります。
なんとか回避できないでしょうか。


Public Class Form1
Private ExitFlag As Boolean = False

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
For I = 1 To 10000
System.Threading.Thread.Sleep(1000)
Application.DoEvents() '他のWindows操作を可能にするため
If ExitFlag Then Exit For
Next
ExitFlag = False
MsgBox("中止されました")
End Sub

Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
ExitFlag = True
End Sub
End Class

A 回答 (3件)

Formを閉じたからといって


For~Next処理が自動的に終了するわけではありません。
Formが閉じた後も、予定した回数分の処理を続けようとします。

なので、Formを閉じたときはFor~Next処理が終了するようにする必要があります。
(または、For~Next処理が終了するまではFormを閉じられないようにする)
今の処理では、ExitFlagでFor~Next処理を終了できるので、Formを閉じるイベントでExitFlagを立ててやれば、きれいに終了できます。
    • good
    • 0
この回答へのお礼

詳しい解説で良くわかりました。ありがとうございました。

お礼日時:2013/06/25 18:09

>Button1を押さないで


とありましたので、フォームのクローズが呼ばれた際に、Button1_Clickと同等の処理を行えばよいと思いました。

そうすると、2つ該当するイベントがありますので、どちらか適切なイベントで実行して下さい。
という回答になります。フラグを更新するだけならばClosingでも良いのかな、と思います。
    • good
    • 0
この回答へのお礼

Closingに入れて何回か実験していますが大丈夫な様です。
再度回答いただきありがとうございました。

お礼日時:2013/06/25 18:11

×ボタンを押すということなので、延長でフォームを閉じるイベントが呼ばれます。



http://drinking-masa.cocolog-nifty.com/blog/2010 …
http://dobon.net/vb/dotnet/vb6/closingevent.html

FormClosingイベント
FormClosedイベント …タイミングは適切なものをご使用ください。
    • good
    • 0
この回答へのお礼

>延長でフォームを閉じるイベントが呼ばれます
ちょっと意味が分かりませんが一度Cloingイベントで受け止めてEndで終わらせるということでしょうか。

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
e.Cancel = True
End
End Sub

お礼日時:2013/06/24 22:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!