FormのFormClosingイベントが意図した動作をしてくれない への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 cupid  (社会人)
投稿日時
2009/11/7 18:22:01
> ダイアログ)を、聞くようにしたのですが、キャンセルを押しても、終了しません
> e.Cancel = True (a)
詳しく見てはいないけど、引用は矛盾していない。つまりForm3が閉じないは、(a)が原因でしょう。
> e.Cancel = True (a)
詳しく見てはいないけど、引用は矛盾していない。つまりForm3が閉じないは、(a)が原因でしょう。
投稿者 ヴァン  (社会人)
投稿日時
2009/11/7 14:42:03
Me.Close()
は必要ないのでは?
すでにClosedのイベントは走ってますから。
は必要ないのでは?
すでにClosedのイベントは走ってますから。
投稿者 winvis  (学生)
投稿日時
2009/11/7 11:23:24
テキストエディタ(MDI形式)を作っているのですが終了時に、テキストボックスに、変更があったときに保存するか否かそれともキャンセルか(はい、いいえ、キャンセルのボタンのついたダイアログ)を、聞くようにしたのですが、キャンセルを押しても、終了しません!いい絵でも、終了しません
と言うか、ダイアログがループしてしまいます!(消えて、すぐもう一個出てくる)
原因がわかりません・・・
誰か、助けてくださいorz
Private Sub Form3_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
If TextBox1.Modified = True Then
If MessageBox.Show("変更されていますが保存しますか?", Form1.Name, _
MessageBoxButtons.YesNoCancel, _
MessageBoxIcon.Exclamation, _
MessageBoxDefaultButton.Button2) = DialogResult.Yes Then
Dim SaveFileDialog As New SaveFileDialog
SaveFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
SaveFileDialog.Filter = "HTMLファイル(*.html)|*.html|テキスト ファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*"
If (SaveFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
Dim FileName As String = SaveFileDialog.FileName
IO.File.WriteAllText(FileName, Me.TextBox1.Text, System.Text.Encoding.GetEncoding("UTF-8"))
End If
If DialogResult.Cancel Then
e.Cancel = True
End If
Else
Me.Close()
End If
End If
End Sub
と言うか、ダイアログがループしてしまいます!(消えて、すぐもう一個出てくる)
原因がわかりません・・・
誰か、助けてくださいorz
Private Sub Form3_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
If TextBox1.Modified = True Then
If MessageBox.Show("変更されていますが保存しますか?", Form1.Name, _
MessageBoxButtons.YesNoCancel, _
MessageBoxIcon.Exclamation, _
MessageBoxDefaultButton.Button2) = DialogResult.Yes Then
Dim SaveFileDialog As New SaveFileDialog
SaveFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
SaveFileDialog.Filter = "HTMLファイル(*.html)|*.html|テキスト ファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*"
If (SaveFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
Dim FileName As String = SaveFileDialog.FileName
IO.File.WriteAllText(FileName, Me.TextBox1.Text, System.Text.Encoding.GetEncoding("UTF-8"))
End If
If DialogResult.Cancel Then
e.Cancel = True
End If
Else
Me.Close()
End If
End If
End Sub
だって、closeをまたしているから、、、
このイベントがまた呼び出されてる、ってことです。
キャンセルといいえの場合分けも入ってませんよ。
(SaveDialogを出してからの保存とキャンセルの場合分けはあるけど。)
やりたいのはこういうことかなあ。