§14 予定表3 プログラミング実習
 back next 

【5】 予定データの登録

 予定データをスケジュールデータに登録(追加)する。日付データと予定データを区切り文字で連結して、スケジュールデータを記憶している変数SDataに追加する。

操作 15 登録ボタンTorokuButtonのクリックイベントに対応するメソッドを次のように作成する。

Private Sub TorokuButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TorokuButton.Click
        Dim work(2) As String
        Dim hizuke As String, pt(3) As Integer
        hizuke = "?1" & txtHizuke.Text.Substring(0, 10)    '検索する日付データ
        pt(1) = SData.IndexOf(hizuke)    '日付検索
        If pt(1) <> -1 Then
            pt(2) = SData.IndexOf("?2", pt(1))    'データ検索
            pt(3) = SData.IndexOf("?3", pt(2))    '終端(終わり)検索
            work(1) = SData.Substring(0, pt(1))   '前半部取り出し
            work(2) = SData.Substring(pt(3) + 2)  '後半部取り出し
            SData = work(1) & work(2)
        End If
        'データの追加登録
        SData = SData & hizuke
        SData = SData & "?2" & txtMemo.Text & "?3"
        lblHenko.Text = "変更なし"
    End Sub

 予定データを表示するメソッドScheduleDataDisplayと同じように、データの区切り位置を検索する。"?1","?2","?3"の位置をそれぞれpt(1),pt(2),pt(3)に記憶する。
 例えば、2008/12/02(hizuke="?12008/12/02")を検索する。
 
01234567890123 4 5 6 7 8 9012345678901234567 8 9 0 1 2345 67890123456789012 3 4
?12008/12/01?2 今日の予定 123?3?12008/12/02?2 今日の予定abc ?3?12008/12/03?2今日の…

 pt(1)=24、pt(2)=36、pt(3)=46である。前半部は先頭から24文字分、後半部は48番目から最後までである。work(1), work(2)はそれぞれ次のようになる。
  work(1)="?12008/12/01?2今日の予定123?3"
  work(2)="?12008/12/03?2今日の … 今日の予定***?3"
 この2つのデータを連結すると検索した日付のデータが取り除ける。このスケジュールデータの最後に新しいデータを追加すれば、最新のスケジュールデータとなる。スケジュールデータは、日付順に並べておく必要はない。

 次に、予定データを変更すると「変更あり」と表示されるようにする。

操作 16 テキストボックスtxtMemoの変更イベントに対応するメソッドを次のように作成する。

    Private Sub txtMemo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtMemo.TextChanged
        lblHenko.Text = "変更あり"
    End Sub

 

【6】 メニューバーの処理

 メニューバーを選択するとそれぞれの機能が働くようにプログラムを追加する。

○ バージョン表示とプログラム終了

操作 17 バーションを表示するため、メニューバーのバージョンに対応するメソッドを次のように作成する。メニューバーの[バージョン(V)]をダブルクリックするとメソッドの定義部が表示される。

    Private Sub バージョンToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles バージョンToolStripMenuItem.Click
        MsgBox("Version 1.0")
    End Sub

操作 18 プログラムを終了するため、メニューバーの終了に対応するメソッドを次のように作成する。メニューバーの[ファイル(F)]をクリックするとメニューが表示される。その中の[終了(X)]をダブルクリックするとメソッドの定義部が表示される。

    Private Sub 終了XToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 終了XToolStripMenuItem.Click
        Me.Close()
    End Sub

 

○ ファイル処理(開くと保存)

操作 19 予定データのファイルを開くため、メニューバーの開くに対応するメソッドを次のように作成する。メニューバーの[ファイル(F)]をクリックするとメニューが表示される。その中の[開く(O)]をダブルクリックするとメソッドの定義部が表示される。

    Private Sub 開くOToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くOToolStripMenuItem.Click
        OpenFileDialog1.ShowDialog()    '開くダイアログ表示
        If OpenFileDialog1.FileName <> "" Then    'ファイル名あり
                                                '↓全データ読み込み
            SData = My.Computer.FileSystem.ReadAllText(OpenFileDialog1.FileName)
            HizukeDisplay()
        End If
    End Sub

 すべての予定データは一つの変数SDataに記憶させるので、ReadAllTextメソッドで一度にすべてを読み込む。
 読み込んだ後は、日付表示のメソッドを呼び出して、予定を表示させる。

操作 20 予定データのファイルを保存するため、メニューバーの名前を付けて保存するに対応するメソッドを次のように作成する。メニューバーの[ファイル(F)]をクリックするとメニューが表示される。その中の[名前を付けて保存する(W)]をダブルクリックするとメソッドの定義部が表示される。

    Private Sub 名前を付けて保存するWToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 名前を付けて保存するWToolStripMenuItem.Click
        SaveFileDialog1.ShowDialog()    '保存ダイアログ表示
        If SaveFileDialog1.FileName <> "" Then    'ファイル名あり
                                        '↓全データ追加書き込み
            My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, SData, True)
        End If
    End Sub

 すべての予定データは一つの変数SDataに記憶させるので、WriteAllTextメソッドで一度にすべてを書き込む。

操作 21 ファイルのダイアログのフィルタを設定する処理を追加する。

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        OpenFileDialog1.Filter = "スケジュール(*.txt)|*.txt|すべてのファイル(*.*)|*.*"
        SaveFileDialog1.Filter = "スケジュール(*.txt)|*.txt|すべてのファイル(*.*)|*.*"
        SData = "?12008/12/01?2今日の予定123?3?12008/12/02?2今日の予定abc?3?12008/12/03?2今日の予定xyz?3?12008/12/04?2今日の予定***?3"    '←削除
        HizukeDisplay()
    End Sub

 

 以上で完成である。

 

 back next 
 §14 予定表3 Copyright©2008 Hiroshi Masuda 

 

 

inserted by FC2 system