/// 実習F1 ファイル処理 プログラミング実習
 back next 

プロジェクト名  (実習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

解答欄(英数字は半角で入力すること。余分な空白は入れないこと)
  @   A
   解答を入力し、[解答チェック]ボタンをクリックする。正解は   、不正解は   で表示される。

解説

 起動時、変更はないので、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

解答欄(英数字は半角で入力すること。余分な空白は入れないこと)
  @   A
   解答を入力し、[解答チェック]ボタンをクリックする。正解は   、不正解は   で表示される。

解説

 変更の有無を確認する。変更がなければ、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にこのプログラムを書くと、ウインドウの閉じる×ボタンをクリックしたときには処理されない。

テスト

□ データに変更を加えると、「変更あり」と表示される。
□ 「変更あり」の表示があるとき、[クリア]、[読み込み]、[終了]の処理前に保存するかどうかを確認のダイアログが開く。
□ [終了]と閉じる×ボタンのどちらで終了しても確認のダイアログが開く。


 back next 
/// 実習F1 ファイル処理 Copyright©2014 Hiroshi Masuda 

 

 

inserted by FC2 system