0

エラーの原因は、イベントをトリガーしたときです。エラーを防ぐためにイベントを無効にしようとしました。ただし、再度有効にすると。イベントがトリガーされると、エラーが再び表示されます。

ListViewにアイテムが存在するかどうかを確認するなど、いくつかのソリューションをGoogleで検索しました

If ListView2.Items.Count > 0 Then

また、イベントの処理に関するコードを見つけました。しかし、それは何もしないようです。

AddHandler ListView2.SelectedIndexChanged, AddressOf ListView2_SelectedIndexChanged

アイテムを削除するとエラーが削除されると思いました。しかし、うまくいきませんでした。

コードは次のとおりです。

For i = ListView2.Items.Count - 1 To 0 Step -1
  ListView2.Items.Remove(ListView2.Items(i))
Next i

以下は、イベントの完全なコードです。

Private Sub ListView2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView2.SelectedIndexChanged
    If ListView2.Items.Count > 0 Then
        TransactionID.Text = ListView2.SelectedItems(0).Text
        Label6.Left -= 190
        Label7.Left -= 190
        GroupBox1.Left -= 190
        ListView2.Left -= 190

        Button2.Visible = True
        ListView1.Visible = True
        GroupBox2.Visible = True
        Label4.Visible = True
        Label5.Visible = True
        ListView2.Enabled = False
        AddHandler ListView2.SelectedIndexChanged, AddressOf ListView2_SelectedIndexChanged
    End If
End Sub

エラーの原因は、ListView2 を選択しようとしていることがわかりましたが、アクセスできなくなったか、Listview にアイテムがないか、選択していません。リストビューにアイテムがあり、リストビューが有効になっていることを確認したのは奇妙です。

そうそう...おそらくこれに対する解決策は何ですか?

編集:リストビューをバインドするためのコードを追加

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If ComboBox1.Text = "" Then
        MsgBox("Please specify status of transaction!")
        ComboBox1.Focus()
    End If
    Dim conn As MySqlConnection
    conn = New MySqlConnection()
    Label6.Text = 0

    time = dateTo.Text
    format = "yyyy-MM-dd"
    outTo = (time.ToString(format))
    outTo = outTo & " " & "23:59:59"

    time = dateFrom.Text
    format = "yyyy-MM-dd"
    outFrom = (time.ToString(format))
    outFrom = outFrom & " " & "00:00:00"

    conn.ConnectionString = "server=localhost;user id=root;password=zhakige;database=singin"
    Dim strSQL = "SELECT transaction_id, transaction_status, transaction_staffusername ,transaction_date, transaction_totalprice FROM `transaction` WHERE transaction_date BETWEEN '" & outFrom & "' AND '" & outTo & "' AND transaction_status = '" & ComboBox1.Text & "';"
    conn.Open()
    Dim cmd = New MySqlCommand(strSQL, conn)
    Dim dr = cmd.ExecuteReader()
    ListView2.Items.Clear()

    Do While dr.Read()
        a = (dr.Item("transaction_id").ToString())
        b = (dr.Item("transaction_status").ToString())
        c = (dr.Item("transaction_staffusername").ToString())
        time = (dr.Item("transaction_date"))
        format = "yyyy-MM-dd"
        output = (time.ToString(format))
        d = output
        e2 = (dr.Item("transaction_totalprice").ToString())


        Dim lv As ListViewItem = ListView2.Items.Add(a)
        lv.SubItems.Add(b)
        lv.SubItems.Add(c)
        lv.SubItems.Add(d)
        lv.SubItems.Add(e2)
        Label6.Text += Val(e2)


    Loop
    If ListView2.Items.Count <= 0 Then
        MsgBox("No record found for specified options")
    End If

    dr.Close()
    cmd.Dispose()
    conn.Close()
End Sub
4

2 に答える 2

0

このコードを変更

For i = ListView2.Items.Count - 1 To 0 Step -1
  ListView2.Items.Remove(ListView2.Items(i))
Next i

If ListView2.Items.Count > 0 Then
  For i = ListView2.Items.Count - 1 To 0 Step - 1
    ListView2.Items.Remove(ListView2.Items(i))
  Next i
End If

アップデート

このコードで

Private Sub ListView2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView2.SelectedIndexChanged
  If ListView2.Items.Count > 0 Then
    TransactionID.Text = ListView2.SelectedItems(0).Text
    Label6.Left -= 190
    Label7.Left -= 190
    GroupBox1.Left -= 190
    ListView2.Left -= 190

    Button2.Visible = True
    ListView1.Visible = True
    GroupBox2.Visible = True
    Label4.Visible = True
    Label5.Visible = True
    ListView2.Enabled = False
    AddHandler ListView2.SelectedIndexChanged, AddressOf ListView2_SelectedIndexChanged
  End If
End Sub

と言う行

    ListView2.Enabled = False

ListView2を無効にするため、ListView2が無効になっている理由と場所を説明する必要があります

また... この行

AddHandler ListView2.SelectedIndexChanged, AddressOf ListView2_SelectedIndexChanged

イベント ハンドラを、それが宣言されているのと同じルーチンに割り当てようとしています!

Private Sub ListView2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView2.SelectedIndexChanged

したがって、おそらく新しいことは何もない可能性があります。

于 2013-04-01T10:07:28.187 に答える
0

MSDNによると

コントロールで選択されている項目を含む ListView.SelectedListViewItemCollection。現在項目が選択されていない場合は、空の ListView.SelectedListViewItemCollection が返されます。

したがって、SelectedItems がない場合、インデックス 0 を使用して値を読み取ることはできません。コードを次のように変更します

If ListView2.SelectedItems.Count > 0 Then
   ....
于 2013-04-01T07:46:34.870 に答える