1 '検索条件の設定
2 Private Enum KeyType As Integer
3 Code '社員ID
4 Name '名前
5 All
6 End Enum
78 'ファイルパスの設定
9 Private EntranceFilePath As String = My.Application.Info.DirectoryPath & "\Entrance.csv"
10 Private StaffFilePath As String = My.Application.Info.DirectoryPath & "\Staff.csv"
1112 'テキストファイルの用意、検索結果の表示
13 Private Sub GetEntranceData()
14 Dim SReader As IO.StreamReader
15 'フォームの準備
16 With Me
17 .EntranceHistoryView.Items.Clear()
18 .StaffInfo.Items.Clear()
19 End With
20 'テキストファイルの有無を確認
21 If Not IO.File.Exists(EntranceFilePath) Then
22 Me.ResultStatus.Text = "ファイルが見つかりませんでした。"
23 MessageBox.Show("入退出履歴(Entrance.csv)がありません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
24 Exit Sub
25 End If
26 'テキストファイルのストリームを生成する
27 Try
28 SReader = New IO.StreamReader(EntranceFilePath, System.Text.Encoding.Default)
29 Catch ex As Exception
30 Me.ResultStatus.Text = "エラーが発生しました。"
31 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
32 Exit Sub
33 End Try
34 '社員コードから検索するプロシージャを呼び出す
35 DisplayRecord(Me.StaffHistoryView, SReader, KeyType.Code, Me.EntranceCode.Text)
36 'テキストファイルのストリームを閉じる
37 SReader.Close()
3839 '続けて同様に社員情報の取得(ここが修正したい箇所です!)
40 If Not IO.File.Exists(StaffFilePath) Then
41 Me.ResultStatus.Text = "ファイルが見つかりませんでした。"
42 MessageBox.Show("社員情報ファイル(Staff.csv)がありません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
43 Exit Sub
44 End If
45 Try
46 SReader = New IO.StreamReader(StaffFilePath, System.Text.Encoding.Default)
47 Catch ex As Exception
48 Me.ResultStatus.Text = "エラーが発生しました。"
49 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
50 Exit Sub
51 End Try
52 DisplayRecord(Me.StaffInfo, SReader, KeyType.Code, Me.StaffCode.Text)
53 SReader.Close()
54 End Sub
5556 '読み出しと配列へ格納
57 Private Sub DisplayRecord(ByRef myListView As ListView, ByVal myReader As IO.StreamReader, ByVal KeyNo As Integer, Optional ByVal Key As String = "")
58 Dim Record As String
59 Dim RecArray() As String
6061 Do While myReader.Peek() <> -1
62 Record = myReader.ReadLine
63 If Record = "" Then
64 Continue Do
65 End If
66 RecArray = Record.Split(",")
67 Dim ListViewLine As ListViewItem = New ListViewItem(RecArray)
68 If KeyNo = KeyType.Code Then
69 If RecArray(KeyNo) <> Key Then '一致しない場合
70 Continue Do '次の読み込みへ
71 End If
72 End If
7374 myListView.Items.Add(ListViewLine)
75 Loop
76 End Sub
777879 '以下すべてリストビューの用意
80 Private Sub setlistview(ByRef mylistview As ListView)
81 '入室履歴リストビューの用意
82 mylistview.View = View.Details
83 With EntranceHistoryView.Columns
84 .Add("社員コード", 50)
85 .Add("部屋コード", 140)
86 .Add("入室時刻", 0)
87 End With
88 End Sub
8990 Private Sub setstaffinfo(ByRef mylistview As ListView)
91 '社員情報リストビューの用意
92 mylistview.View = View.Details
93 With StaffInfo.Columns
94 .Add("社員コード", 0)
95 .Add("社員氏名", 100)
96 .Add("ふりがな", 50)
97 .Add("郵便番号", 50)
98 .Add("住所", 100)
99 End With
100 End Sub
101102 Private Sub FormInput_Load(sender As Object, e As EventArgs) Handles MyBase.Load
103 'リストビュー読み込み
104 setlistview(Me.EntranceHistoryView)
105 setstaffinfo(Me.StaffInfo)
106 End Sub
##解決
社員情報をTextBoxに表示したいため、Private Sub GetEntranceDataとPrivate Sub DisplayRecordのうち該当箇所をこのように変更してみました。とりあえず、これで動きました。
VB
1 If Not IO.File.Exists(StaffFilePath) Then
2 Me.ResultStatus.Text = "ファイルが見つかりませんでした。"
3 MessageBox.Show("社員情報ファイル(Staff.csv)がありません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
4 Exit Sub
5 End If
6 Try
7 SReader = New IO.StreamReader(StaffFilePath, System.Text.Encoding.Default)
8 Catch ex As Exception
9 Me.ResultStatus.Text = "エラーが発生しました。"
10 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
11 Exit Sub
12 End Try
13 'さきほどとは別のプロシージャを読み込みます
14 DisplayStaffRecord(Me.StaffInfo, SReader, KeyType.Code, Me.StaffCode.Text)
15 SReader.Close()
16 End Sub
1718 'とりあえず、DisplayRecordとは別のプロシージャを作ります。
19 Private Sub DisplayStaffRecord(ByRef myListView As ListView, ByVal myReader As IO.StreamReader, ByVal KeyNo As Integer, Optional ByVal Key As String = "")
20 Dim Record As String
21 Dim RecArray() As String
2223 Do While myReader.Peek() <> -1
24 Record = myReader.ReadLine
25 If Record = "" Then
26 Continue Do
27 End If
28 RecArray = Record.Split(",")
29 Dim ListViewLine As ListViewItem = New ListViewItem(RecArray)
30 If KeyNo = KeyType.Code Then
31 If RecArray(KeyNo) <> Key Then
32 Continue Do
33 End If
34 End If
3536 '配列からテキストを取得
37 TextBoxName.text = RecArray(1)
38 TextBoxKana.text = RecArray(2)
39 TextBoxPostCode.text = RecArray(3)
40 TextBoxAddress.text = RecArray(4)
41 Loop
42 End Sub