ListView Subitem auf Existenz prüfen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von FormFollowsFunction.

    ListView Subitem auf Existenz prüfen

    Hi,

    ich baue gerade an meinem Projekt rum und ersetze die meisten Listviews durch Datagrids.
    Nun habe ich aber noch einige vor mir und möchte einen Sicherheitscheck beim schreiben eines Subitems in einer alten Listview machen.

    dazu habe ich folgenden Code:

    VB.NET-Quellcode

    1. Public Function Check_SubItem(ByVal LViewItem As ListViewItem, ByVal Sub_Item As Integer) As Boolean
    2. Check_SubItem = False
    3. 'Prüfen ob das zu schreibende Subitem in der angegebenen Listview existiert
    4. If Not LViewItem.SubItems(Sub_Item) Is Nothing Then
    5. Check_SubItem = True
    6. End If
    7. Return Check_SubItem
    8. End Function


    Solange das Subitem existiert geht der Code mit Check_SubItem TRUE raus, wenn es nicht Existent ist schmeißt mich Vb ohne Fehlermeldung aus dem aufrufenden Programmteil und macht wie bei einem Exit Sub eine Ebene höher weiter.
    Das passiert beim debuggen genau hier: If Not LViewItem.SubItems(Sub_Item) Is Nothing
    Ich schaffe es nicht eine Fehlermeldung zu generieren oder die Nichtexistenz des Subitems der Listview zu bestätigen bevor ich dorthin einen Wert schreibe.

    Für Vorschläge und Ideen ein Dank im voraus.

    Mabbi schrieb:

    schmeißt mich Vb ohne Fehlermeldung aus dem aufrufenden Programmteil
    Steht der primäre Aufruf in der Form_Load?
    Ansonsten debuggen:
    Debuggen, Fehler finden und beseitigen
    Ansonsten probierma:

    VB.NET-Quellcode

    1. Public Function Check_SubItem(ByVal LViewItem As ListViewItem, ByVal Sub_Item As Integer) As Boolean
    2. If LViewItem Is Nothing Return False
    3. Return LViewItem.SubItems(Sub_Item) IsNot Nothing
    4. End Function

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Mabbi Und?
    Läuft mein Code?
    Ansonsten pack den Code in die Form_Shown.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Aufruf nach "SHOWN" verschoben und ich kann endlich debuggen...Danke für den Tipp

    Dein Code läuft mit 2 Änderungen:

    Die Code-Bremse gesichtet und korrigiert, und ich prüfe noch den SUbitemsCount gegen den übergebenen (Index -1), um hier einen möglichen Error in der Folgezeile auch abzufangen.

    VB.NET-Quellcode

    1. Public Function Check_SubItem(ByVal LViewItem As ListViewItem, ByVal Sub_Item As Integer) As Boolean
    2. If LViewItem Is Nothing Then Return False
    3. If LViewItem.SubItems.Count < Sub_Item Then Return False
    4. Return LViewItem.SubItems(Sub_Item) IsNot Nothing
    5. End Function


    Jetzt tut die Funktion genau das, was Sie soll. Vielen Dank für die Hilfe.
    Da geht aber noch was:

    VB.NET-Quellcode

    1. Module Extensions
    2. <Extension>
    3. Public Function SubItemExist(ByVal listViewItem As ListViewItem, ByVal subItemIndex As Integer) As Boolean
    4. If subItemIndex = 0 Then
    5. Throw New ArgumentException($"Index '{subItemIndex}' represent the main ListViewItem.", "subItemIndex")
    6. ElseIf subItemIndex < 0 Then
    7. Throw New ArgumentException($"Index '{subItemIndex}' is invalid.", "subItemIndex")
    8. End If
    9. Return listViewItem.SubItems.Count - 1 >= subItemIndex
    10. End Function
    11. End Module