職案人

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

本格アプリの作り方-その6/新機能のコーデング

2020年04月05日 | VB2017
-----家計簿アプリに集計機能のコーデング---

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

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

【画面デザイン】



【集計表示デザイン】
①集計表示タブをクリックし、DataGridViewコントロールを貼る

②データソースの選択
DataGridViewコントロールのスマートタグをクリックし、次に[データソースの選択]の↓ボタンをクリックし、「他のデータソース」-「プロジェクトデータソース」-「SummaryDataSet」-「SunDataTable」を選ぶ

③データセットが表示される


【コード】
Form1.vbに下記の関数を追加する。
Public Class Form1

'------------------------------
'データ集計
'------------------------------
Private Sub CalcSummary()
'変数宣言
Dim expression As String

'データセットの初期化
SummaryDataSet.SunDaTaTable.Clear()

'forループ文
For Each drMoney As MoneyDataSet.moneyDataTableRow _
In MoneyDataSet.moneyDataTable
expression = "日付='" _
+ drMoney.日付.ToShortDateString() _
+ "'"
'データの型変換 CType()
Dim curDR() As SummaryDataSet.SunDaTaTableRow _
= CType(SummaryDataSet.SunDaTaTable.Select(expression),
SummaryDataSet.SunDaTaTableRow())
'if文
If curDR.Length = 0 Then
'if文
If (CType(CategoryDataSet1.CategoryDataTable.Select _
("分類='" & drMoney.分類 & "'"),
CategoryDataSet.CategoryDataTableRow())(0).入出金分類 = "入金") Then
SummaryDataSet.SunDaTaTable.AddSunDaTaTableRow(
drMoney.日付, drMoney.金額, 0)

ElseIf (CType(CategoryDataSet1.CategoryDataTable.Select _
("分類='" & drMoney.分類 & "'"),
CategoryDataSet.CategoryDataTableRow())(0).入出金分類 = "出金") Then
SummaryDataSet.SunDaTaTable.AddSunDaTaTableRow(
drMoney.日付, 0, drMoney.金額)
End If

Else
If (CType(CategoryDataSet1.CategoryDataTable.Select _
("分類='" & drMoney.分類 & "'"),
CategoryDataSet.CategoryDataTableRow())(0).入出金分類 = "入金") Then
curDR(0).入金合計 += drMoney.金額

ElseIf (CType(CategoryDataSet1.CategoryDataTable.Select _
("分類='" & drMoney.分類 & "'"),
CategoryDataSet.CategoryDataTableRow())(0).入出金分類 = "出金") Then
curDR(0).出金合計 += drMoney.金額
End If
End If
Next
End Sub
'-----------------------------------------------------------------------------
'イベントハンドラ
'----------------------------------------------------------------------------
[集計表示]タブのイベントハンドラ


Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TabControl1.SelectedIndexChanged
CalcSummary()
End Sub

[表示]-[一覧表示]

Private Sub 一覧表示LToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 一覧表示LToolStripMenuItem.Click
TabControl1.SelectedTab = tabList
End Sub

[表示]-[集計表示]
Private Sub 集計表示SToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 集計表示SToolStripMenuItem.Click
TabControl1.SelectedTab = tabSummary
End Sub

End Class

以上
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

本格アプリの作り方-その5/新機能

2020年04月02日 | VB2017
-----家計簿アプリに集計機能を追加するには----

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

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

【データ集計機能を実装する】
■集計するためのデータセットを作る。
①ソリューションエクスプローラの「家計簿」プロジェクトを右クリックし、「追加」-「新しい項目」を選択する

②「共通項目」から「データセット」を選び、
名前欄に「SummaryDataSet.xsd」と入力して、「追加」ボタンをクリックする。

③データセットデザイナが開く


④型付きデータセットの作成
データセットデザイナの左側にあるデータセットに有るDataTableをデータセットデザイナにドラック&ドロップする
その後、列の追加と各プロパティの設定する。最後に「ビルド」メニューから「ソリューションのビルド」を選択

・DataTableコントロール名:SumDataTable
・1列目
Nameプロパティ→日付 Datatypeプロパティ→System.DateTime
・2列目
Nameプロパティ→入金合計 Datatypeプロパティ→System.Int32
・3列目
Nameプロパティ→出金合計 Datatypeプロパティ→System.Int32

⑤TabControlコントロールを貼る

⑥TabControlコントロールを広げ、その上に一覧画面と各ボタンを乗せる

⑦位置を調整をする


⑧2つのタブに名前を設定する
・TabControlコントロールをクリックし、プロパティウインドウのTabPages1プロパティを選択する

TabPageコレクションエディターが立ち上がったら、下記のように設定
Textプロパティ=一覧表示
(Name)プロパティ=tabList


⑨タブの完成
・次はメンバーのTabPages2プロパティを選択し、下記のように設定
Textプロパティ=集計表示
(Name)プロパティ=tabSummary

完成画面
細かな所は自分なりに調整する。ボタンの位置や画面のサイズなど

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

本格アプリの作り方-その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をはじめ以前のバージョンをダウンロードするには

2020年03月07日 | VB2017
以前のバージョンをダウンロードするには


【開発環境】
os:Windows 10 (64ビット)

【旧Visual Studio ダウンロード】
一般にVisual Studio ダウンロードしようとすると、Visual Studio 2019がインストールされてしまう。
そこで、以前のバージョンをしたい時は、Visual Studio 2017で検索をかけると、下記のサイトが現れる。


その後、使いたいバージョンをダウンロードするだけ。

【インストール】
インストールはサイト検索で調べてからやったほうが良い。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

本格アプリの作り方-その3/メインフォームの処理

2020年03月05日 | VB2017
----メイン画面の----

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

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

【コーデング・メイン画面】
1)登録画面の表示

2)「追加」ボタンをダブルクリックし、コードを書く
Private Sub buttonAdd_Click(sender As Object, e As EventArgs) Handles buttonAdd.Click
'登録フォームの作成
Dim frmItem As ItemForm = New ItemForm()
'モダン画面で開く
Dim drRet As DialogResult = frmItem.ShowDialog()
End Sub
実行し、「追加」ボタンを押すと、登録画面の表示される。

3)CategoryDataSetコンポーネントを貼り付ける


4)家計簿のコーデング
Public Class Form1
'-----------------------------------------------------------------------------
'初期化
'----------------------------------------------------------------------------
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  データセットの初期化→「BC30469 非共有メンバーを参照するには、オブジェクト参照が必要です。」とエラーが出たら、はじめからセットし直す。

CategoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("給料", "入金")
CategoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("食費", "出金")
CategoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("雑費", "出金")
CategoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("住居", "出金")
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 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
End Class

【登録・コーデング】
Public Class ItemForm
Public Sub New(ByVal dsCategory As CategoryDataSet)
InitializeComponent() ' 初期化処理
CategoryDataSet.Merge(dsCategory)
End Sub


End Class

【実行】
追加ボタンを押すと、登録の分類がセットされていた。


【重要】
データセットとDataGridViewコントロールは自動的に関連されている為、データセットのデータを変更すると、表示も変更される。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする