/// 実習F1 ファイル処理 | プログラミング実習 |
プロジェクト名 (実習F1テキストファイルの読み書き)
説明
データに変更ある場合、[クリア]、[読み込み]、[終了]の前に保存するかどうかを確認する。
デザイン
フォームのプロパティ Text = 実習F1テキストファイルの読み書き5
[追加] ラベル Name = lblHenkou Text = "変更"
コード@(プログラム) 変更部分のみ 及び 新規作成
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles
Me.Load
<< 略 >>
lblHenkou. @ = "" '変更なし ←追加
End Sub
Private Sub tbxData_TextChanged(sender As System.Object, e As System.EventArgs)
Handles tbxData.TextChanged
lblHenkou. A = "変更あり"
End Sub
解説
起動時、変更はないので、lblHenkouの変更の表示を消す。
tbxDataのデータに変更があると、TextChangedイベントが発生するので、それに対応するメソッドを作成してlblHenkouに「変更あり」と表示する。
lblHenkouの表示データによって、変更ありかなしかを判定できる。
コードA(プログラム) 新規作成 End Sub と End Class の間に作成する。
Private Sub KakuninFileWrite() '[メソッドの新規作成]
Dim res As DialogResult
If lblHenkou.Text = "" Then '変更なければ、
Exit Sub 'このメソッドを終える。
End If
res = MessageBox.Show("データに変更があります。保存しますか?", "実習F1",
MessageBoxButtons.YesNo)
If res = Windows.Forms.DialogResult.No Then '[いいえ]のとき、
Exit Sub 'このメソッドを終える。
End If
'以下は、btnFWrite_Clickメソッドと同じ
@ = tbxFName.Text
res = A
If res = Windows.Forms.DialogResult.OK Then
tbxFName.Text = SaveFileDialog1.FileName
My.Computer.FileSystem.WriteAllText(tbxFName.Text, tbxData.Text,
False)
End If
End Sub
解説
変更の有無を確認する。変更がなければ、Exit Subでこのメソッドを終える。
次に、保存するかどうかを尋ねる。保存しない([いいえ])とき、Exit Subでこのメソッドを終える。
コードB(プログラム) 変更部分のみ 及び 新規作成
Private Sub tbxClear_Click(sender As System.Object, e As System.EventArgs)
Handles tbxClear.Click
KakuninFileWrite() ←追加
tbxData.Text = ""
lblHenkou.Text = @ '変更なし ←追加
End Sub
解説
[クリア]の前に保存するかどうかを確認する。
コードC(プログラム) 変更部分のみ
Private Sub btnFRead_Click(sender As System.Object, e As System.EventArgs)
Handles btnFRead.Click
Dim res As DialogResult
@ ←追加
OpenFileDialog1.FileName = tbxFName.Text
res = OpenFileDialog1.ShowDialog()
If res = Windows.Forms.DialogResult.OK Then
tbxFName.Text = OpenFileDialog1.FileName
tbxData.Text = My.Computer.FileSystem.ReadAllText(tbxFName.Text)
lblHenkou.Text = "" '変更なし ←追加
End If
End Sub
解説
[読み込み]の前に保存するかどうかを確認する。
コードD(プログラム) 新規作成
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs)
Handles Me.FormClosing
Dim res As DialogResult
KakuninFileWrite()
res = MessageBox.Show("終了しますか?", "実習F1", MessageBoxButtons.YesNo)
If res = Windows.Forms.DialogResult.No Then
e.Cancel = @ '終了をキャンセルする(終了しない)
End If
End Sub
キーワード
FormClosingイベント … プログラムが終了するときに発生するイベント。
解説
[終了]の前に保存するかどうかを確認する。
(Form1イベント)のFormClosingメソッドを用意する。このFormClosingイベントは、このプログラムが終了するときに発生する。
引数e(As System.Windows.Forms.FormClosingEventArgs)のCancelプロパティにTrueを設定するとプログラム終了を取りやめることができる。
[終了]に対応するbtnOwari_Clickにこのプログラムを書くと、ウインドウの閉じる×ボタンをクリックしたときには処理されない。
テスト
□ データに変更を加えると、「変更あり」と表示される。
□ 「変更あり」の表示があるとき、[クリア]、[読み込み]、[終了]の処理前に保存するかどうかを確認のダイアログが開く。
□ [終了]と閉じる×ボタンのどちらで終了しても確認のダイアログが開く。
/// 実習F1 ファイル処理 | Copyright©2014 Hiroshi Masuda |