職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

本格アプリの作り方-その4/ファイル保存

2020年03月16日 | VB2017
本格アプリの作り方-ファイル保存

【開発環境】
os:Windows 10 (64ビット)
IDE(統合開発環境):VisualStudio 2017及び2019
言語;VB

【参考書】
株式会社秀和システム「作って覚えるVisualBasic2017」
著者:萩原 博之/宮崎 昭世

【コーデング】
■家計簿(一覧画面)
Public Class Form1
'-----------------------------------------------------------------------------
'初期化
'----------------------------------------------------------------------------
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
CategoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("給料", "入金")
CategoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("食費", "出金")
CategoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("雑費", "出金")
CategoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("住居", "出金")
'ファイルの読み込み
LoadData()
End Sub
'-------------------------------------------------------
'サブルーチン
'-------------------------------------------------------
'----------------------------
'データをデータセットに格納す
'----------------------------
Private Sub AddData()
Dim frmItem As ItemForm = New ItemForm(CategoryDataSet1)
Dim drRet As DialogResult = frmItem.ShowDialog()

If drRet = System.Windows.Forms.DialogResult.OK Then
MoneyDataSet.moneyDataTable.AddmoneyDataTableRow(
frmItem.monCalendar.SelectionRange.Start(),
frmItem.cmbCategory.Text,
frmItem.txtItem.Text,
Integer.Parse(frmItem.mtxtMoney.Text),
frmItem.txtRemarks.Text)
End If

End Sub
'----------------------------
'データのファイル保存
'----------------------------
Private Sub SaveData()
Dim path As String = "MoneyData.csv" ' 出力ファイル名
Dim strData As String ' 1行分のデータ

Dim sw As System.IO.StreamWriter _
= New System.IO.StreamWriter(path,
False, System.Text.Encoding.Default)

'-----------------------------------------
'For~Next文→繰り返し制御文
'ToString()→日付や整数を文字型に変換
'ToShortDateString()→時刻を除いた日付のみ
'-------------------------------------------

For Each drMoney As MoneyDataSet.moneyDataTableRow _
In MoneyDataSet.moneyDataTable
strData = drMoney.日付.ToShortDateString() _
+ "," + drMoney.分類 _
+ "," + drMoney.品名 _
+ "," + drMoney.金額.ToString() _
+ "," + drMoney.備考
sw.WriteLine(strData) 'データをファイルへ書き込む
Next
  ’ファイルを閉じる
sw.Close()
End Sub

'--------------------------------
'ファイルからのデータ読込み
'--------------------------------
Sub LoadData()
Dim path As String = "MoneyData.csv" ' 入力ファイル名
Dim delimStr As String = "," ' 区切り文字
Dim delimiter() As Char = delimStr.ToCharArray ' 区切り文字をまとめる
Dim strData() As String ' 分解後の文字の入れ物
Dim strLine As String ' 1行分のデータ

Dim fileExists As Boolean _
= My.Computer.FileSystem.FileExists(path)

'if文
If fileExists Then 'ファイルが存在すれば読み込む
Dim sr As IO.StreamReader =
New IO.StreamReader(path, System.Text.Encoding.Default)

'--------------------------------------------
'While~next文(条件付きループ処理)
'Parse()→文字型を他の型に変換する
'ToString()→日付や整数を文字型に変換
'----------------------------------------
While (sr.Peek() >= 0)
strLine = sr.ReadLine()
strData = strLine.Split(delimiter)
MoneyDataSet.moneyDataTable.AddmoneyDataTableRow(
Date.Parse(strData(0)),
strData(1).ToString(),
strData(2).ToString(),
Integer.Parse(strData(3)),
strData(4).ToString()
)
End While
sr.Close()
End If
End Sub

'--------------------------------
'アップロード→データの変更
'--------------------------------
Private Sub UpdateData()
Dim nowRow As Integer = dgv.CurrentRow.Index
Dim oldDate As Date _
= Date.Parse(dgv.Rows(nowRow).Cells(0).Value.ToString())
Dim oldCategory As String = dgv.Rows(nowRow).Cells(1).Value.ToString()
Dim oldItem As String = dgv.Rows(nowRow).Cells(2).Value.ToString()
Dim oldMoney As Integer _
= Integer.Parse(dgv.Rows(nowRow).Cells(3).Value.ToString())
Dim oldRemarks As String = dgv.Rows(nowRow).Cells(4).Value.ToString()
Dim frmItem As ItemForm = New ItemForm(
CategoryDataSet1, oldDate, oldCategory, oldItem, oldMoney, oldRemarks)
Dim drRet As DialogResult = frmItem.ShowDialog()

'登録画面で登録ボタンがクリックされた処理
If drRet = DialogResult.OK Then
dgv.Rows(nowRow).Cells(0).Value _
= frmItem.monCalendar.SelectionRange.Start()
dgv.Rows(nowRow).Cells(1).Value = frmItem.cmbCategory.Text
dgv.Rows(nowRow).Cells(2).Value = frmItem.txtItem.Text
dgv.Rows(nowRow).Cells(3).Value = Integer.Parse(frmItem.mtxtMoney.Text)
dgv.Rows(nowRow).Cells(4).Value = frmItem.txtRemarks.Text
End If
End Sub

'--------------------------------
'データの削除
'-------------------------------
Private Sub DeleteData()
Dim nowRow As Integer = dgv.CurrentRow.Index
dgv.Rows.RemoveAt(nowRow) '現在行を削除
End Sub

'-----------------------------------------------------------------------------
'イベントハンドラ
'----------------------------------------------------------------------------
Private Sub buttonAdd_Click(sender As Object, e As EventArgs) Handles buttonAdd.Click
'データ追加
AddData()
End Sub

Private Sub 追加AToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 追加AToolStripMenuItem.Click
'データ追加
AddData()
End Sub

Private Sub buttonEnd_Click(sender As Object, e As EventArgs) Handles buttonEnd.Click
Me.Close()
End Sub

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

Private Sub 保存SToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 保存SToolStripMenuItem.Click
'データ保存
SaveData()
End Sub

Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
SaveData()
End Sub

Private Sub buttonChange_Click(sender As Object, e As EventArgs) Handles buttonChange.Click
UpdateData()
End Sub

Private Sub 変更CToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 変更CToolStripMenuItem.Click
UpdateData()
End Sub

Private Sub buttonDelete_Click(sender As Object, e As EventArgs) Handles buttonDelete.Click
DeleteData()
End Sub

Private Sub 削除DToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 削除DToolStripMenuItem.Click
DeleteData()
End Sub
End Class

■家計簿(登録画面)
Public Class ItemForm
'1つ目のインストラクタ(引数1)
Public Sub New(ByVal dsCategory As CategoryDataSet)
InitializeComponent() ' 初期化処理
CategoryDataSet.Merge(dsCategory)
End Sub

'2つ目のインストラクタ(引数6)
Public Sub New(
dsCategory As CategoryDataSet,
nowDate As Date,
category As String,
item As String,
money As Integer,
remarks As String)

InitializeComponent() ' 初期化処理
CategoryDataSet.Merge(dsCategory)
monCalendar.SetDate(nowDate)
cmbCategory.Text = category
txtItem.Text = item
mtxtMoney.Text = money.ToString()
txtRemarks.Text = remarks
End Sub

End Class
【操作画面】
家計簿の「追加」ボタンをクリックすると、登録画面が現れる

登録画面にデータを入れ、「登録」ボタンを押すと、家計簿のグリッドにデータが表示される


【データファイルの場所】


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Visual Basic2017をはじめ以... | トップ | 光回線を乗り換えるには--メモ »
最新の画像もっと見る

コメントを投稿

VB2017」カテゴリの最新記事