GUI上でリストビューを使用して、長い手順で何が起こっているのかをユーザーにフィードバックします。モジュールには、メインプロシージャに4つのサブプロシージャがあり、リストビューの最後の列には、保留中、実行中、完了済みなどのステータスが表示されます。したがって、サブプロシージャが完了すると、対応する行のサブアイテムは「完了」として更新される必要があります。リストビューはビジュアルベーシックのモジュールから更新(またはアクセス)できません2015
ところで、基本的にはフォームであるGUIが表示されているとき(フォームロード)に問題なく、リストビューに項目を追加できます。
以下のスクリプトで、ボタンのクリックイベントでその関数を呼び出すと、すべてうまく機能します。しかし、このモジュールでは、listviewにすでに4つの項目が追加されている間にメッセージボックスの結果はゼロになります。メッセージボックスの後の行に次のエラーが表示されます。
"System.Windows.Forms.dllで 'System.ArgumentOutOfRangeException'型の未処理の例外が発生しました 追加情報:InvalidArgument =値 '0'は 'index '
問題は何ですか?前もって感謝します!フォームが読み込まれる前に、サブメインが呼び出された場合
Module Module1
Sub CreateReport()
Call SubProcedure1()
'Update listview
MessageBox.Show("There is/are: " & form6_ins.ListView1.Items.Count & " item(s)!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
Call ListView_ScheduleUpdate1(0, 2, "Completed", 1, 2, "Running", ListView1) 'Throws Error
Call SubProcedure2()
'Update listview as well
Call SubProcedure3()
'Update listview as well
Call SubProcedure4()
'Update listview as well
End Sub
'Function to update the listview items
Public Function ListView_ScheduleUpdate1(ByVal itemNumX As Integer, ByVal subItemNumX As Integer, ByVal givenFeedbackX As String,
ByVal itemNumY As Integer, ByVal subItemNumY As Integer, ByVal givenFeedbackY As String, ByRef LV As ListView)
LV.Items(itemNumX).SubItems(subItemNumX).Text = givenFeedbackX
LV.Items(itemNumY).SubItems(subItemNumY).Text = givenFeedbackY
LV.Refresh()
End Function
End Module
'Form
Public Class Form1
Private Sub But_Report_DSchedule_Click(sender As Object, e As EventArgs) Handles But_Report_DSchedule.Click
MessageBox.Show("There is/are: " & ListView1.Items.Count & " item(s)!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
Call ListView_ScheduleUpdate1(0, 2, "Completed", 1, 2, "Running", ListView1)
End Sub
End Class
@ CB_Ron-ご返信ありがとうございます。 Sub Mainは、フォーム上のボタンをクリックすると呼び出されます。実際にはメインサブではなく、メインサブにフォームがロードされます。私はそれを誤ってラベルした。フォームはそのサブの前にあります。 – Yusuf