Columns werden nicht in Listview eingetragen

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

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von B4dP2o.

    Columns werden nicht in Listview eingetragen

    Hallo Leute,

    ich habe das Problem, dass ich min. 2 Listviews habe. anhand einer funktion möchte ich automatisch ein item erstellen. in diese funktion übergebe ich die listview und den namen des items. wenn festgestellt wird, dass das item noch nicht existiert sollen automatisch alle subitems für die jeweiligen spalten hinzugefügt und das neue item zurückgegeben werden. bei der ersten listview funktioniert alles wunderbar, wie gewünscht und erwartet. bei der zweiten bekommen ich aber jedesmal, sobald ich das item weiter verarbeiten möchte, dass die index der abgefragten columns =-1 ist => ergo es "existieren" keine spalten laut dem control, werden jedoch in der form angezeigt.

    Im Screenshot 1 seht ihr oben die Listview "lvItemsOV", bei der alle problemlos funktioniert, unten seht ihr die "lvItemTrade", bei der die spalten nicht "eingetragen/vorhanden" sind.
    Im Screenshot 4 übergebe ich die lvItemTrade an die function createLVItem. es werden keine subitems erstellt, das anscheinend keine columns in der besagten lv vorhanden sind.
    Im Screenshot 5 sieht man, dass die Columns vom Programm erkannt werden (Wie in Screenshot 3 zu sehen auch in der lv vorhanden sind), aber nicht in die lv, programmseitig, eingetragen wurden.

    Ich finde meinen Fehler nicht und hoffe ihr habt die notwendigen infos, um mir helfen zu können :D

    funktion zur erstellung des listviewitems

    VB.NET-Quellcode

    1. Public Function createLVItem(lv As ListView, name As String) As ListViewItem
    2. Dim index As Integer = -1
    3. For Each column As ColumnHeader In lv.Columns
    4. If column.Text = "Name" Then
    5. index = column.Index
    6. End If
    7. Next
    8. For Each lvItem As ListViewItem In lv.Items
    9. If lvItem.SubItems(index).Text = name Then
    10. Return lvItem
    11. End If
    12. Next
    13. Dim newItem As New ListViewItem
    14. newItem = New ListViewItem
    15. newItem.UseItemStyleForSubItems = False
    16. For a = 1 To lv.Columns.Count - 1
    17. newItem.SubItems.Add("")
    18. Next
    19. Return newItem
    20. End Function


    VB.NET-Quellcode

    1. Private Sub lvItemsOverview_ItemSelectionChanged(sender As Object, e As ListViewItemSelectionChangedEventArgs) Handles lvItemsOV.ItemSelectionChanged
    2. lvItemTrade.Clear()
    3. Dim name As String = e.Item.SubItems(lvItemsOV_cName.Index).Text
    4. Dim lvItem As ListViewItem
    5. '...
    6. lvItem = createLVItem(lvItemTrade, name)
    7. lvItem.SubItems(lvItemTrade_cSP01.Index).BackColor = Color.FromArgb(45, 45, 45) '.Index = -1
    8. lvItem.SubItems(lvItemTrade_cSP02.Index).BackColor = Color.FromArgb(45, 45, 45)
    9. lvItem.SubItems(lvItemTrade_cSP03.Index).BackColor = Color.FromArgb(45, 45, 45)
    10. '...
    11. End Sub


    Ausschnitt aus dem Designer:

    VB.NET-Quellcode

    1. Partial Class Window
    2. Inherits System.Windows.Forms.Form
    3. '...
    4. <System.Diagnostics.DebuggerStepThrough()>
    5. Private Sub InitializeComponent()
    6. Me.components = New System.ComponentModel.Container()
    7. Me.tcMain = New System.Windows.Forms.TabControl()
    8. Me.tcMain_tpItemsÜbersicht = New System.Windows.Forms.TabPage()
    9. Me.lvItemTrade = New System.Windows.Forms.ListView() 'Diese Listview macht Probleme!
    10. Me.lvItemTrade_cName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    11. Me.lvItemTrade_cSP01 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    12. Me.lvItemTrade_c'...
    13. '...
    14. Me.lvItemsOV = New System.Windows.Forms.ListView() 'Diese Listview funktioniert problemlos!
    15. Me.lvItemsOV_cName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    16. Me.lvItemsOV_cID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    17. Me.lvItemsOV_c'...
    18. '...
    19. '
    20. 'tcMain_tpItemsÜbersicht
    21. '
    22. Me.tcMain_tpItemsÜbersicht.Controls.Add(Me.lvItemTrade)
    23. Me.tcMain_tpItemsÜbersicht.Controls.Add(Me.lvItemsOV)
    24. '
    25. 'lvItemTrade
    26. '
    27. 'Hier sind alle Spalten eingetragen:
    28. Me.lvItemTrade.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.lvItemTrade_cName, Me.lvItemTrade_cSP01, Me.lvItemTrade_cEK, Me.lvItemTrade_cSP02, Me.lvItemTrade_cVKmin, Me.lvItemTrade_cSP03, Me.lvItemTrade_cVK10, Me.lvItemTrade_cVK20, Me.lvItemTrade_cVK30, Me.lvItemTrade_cVK40, Me.lvItemTrade_cVK50})
    29. Me.lvItemTrade.ForeColor = System.Drawing.Color.White
    30. Me.lvItemTrade.FullRowSelect = True
    31. Me.lvItemTrade.View = System.Windows.Forms.View.Details
    32. '
    33. 'lvItemTrade_cName
    34. '
    35. Me.lvItemTrade_cName.Text = "Name"
    36. Me.lvItemTrade_cName.Width = 100
    37. '
    38. 'lvItemTrade_cSP01
    39. '
    40. Me.lvItemTrade_cSP01.Text = ""
    41. Me.lvItemTrade_cSP01.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
    42. Me.lvItemTrade_cSP01.Width = 1
    43. '...
    44. '
    45. 'lvItemsOV
    46. '
    47. 'Hier sind alle Spalten eingetragen:
    48. Me.lvItemsOV.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.lvItemsOV_cName, Me.lvItemsOV_cID, Me.lvItemsOV_cSP01, Me.lvItemsOV_cFamily, Me.lvItemsOV_cType, Me.lvItemsOV_cCategory, Me.lvItemsOV_cSP02, Me.lvItemsOV_cEKMin, Me.lvItemsOV_cEKNow, Me.lvItemsOV_cSP03, Me.lvItemsOV_cVKNow, Me.lvItemsOV_cVKMax, Me.lvItemsOV_cSP04, Me.lvItemsOV_cProfitNowToMax, Me.lvItemsOV_cProfitNowToMaxPer, Me.lvItemsOV_cSP05, Me.lvItemsOV_cProfitMax, Me.lvItemsOV_cProfitMaxPer, Me.lvItemsOV_cSP06, Me.lvItemsOV_cBuyInterval, Me.lvItemsOV_cSellInterval, Me.lvItemsOV_cNew})
    49. Me.lvItemsOV.ForeColor = System.Drawing.Color.White
    50. Me.lvItemsOV.FullRowSelect = True
    51. Me.lvItemsOV.View = System.Windows.Forms.View.Details
    52. '
    53. 'lvItemsOV_cName
    54. '
    55. Me.lvItemsOV_cName.Text = "Name"
    56. Me.lvItemsOV_cName.Width = 100
    57. '
    58. 'lvItemsOV_cID
    59. '
    60. Me.lvItemsOV_cID.Text = "ID"
    61. Me.lvItemsOV_cID.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
    62. Me.lvItemsOV_cID.Width = 50
    63. '...
    64. End Sub
    65. '...
    66. Friend WithEvents lvItemsOV_cName As ColumnHeader
    67. Friend WithEvents lvItemsOV_cID As ColumnHeader
    68. Friend WithEvents lvItemsOV_cSP01 As ColumnHeader
    69. Public WithEvents lvItemsOV As ListView
    70. '...
    71. Friend WithEvents lvItemTrade_cName As ColumnHeader
    72. Friend WithEvents lvItemTrade_cSP01 As ColumnHeader
    73. Friend WithEvents lvItemTrade_cEK As ColumnHeader
    74. Friend WithEvents lvItemTrade_cSP02 As ColumnHeader
    75. Friend WithEvents lvItemTrade_cVKmin As ColumnHeader
    76. Friend WithEvents lvItemTrade_cSP03 As ColumnHeader
    77. Friend WithEvents lvItemTrade_cVK10 As ColumnHeader
    78. Friend WithEvents lvItemTrade_cVK20 As ColumnHeader
    79. Friend WithEvents lvItemTrade_cVK30 As ColumnHeader
    80. Friend WithEvents lvItemTrade_cVK40 As ColumnHeader
    81. Friend WithEvents lvItemTrade_cVK50 As ColumnHeader
    82. Friend WithEvents lvItemTrade As ListView
    83. '...
    84. End Class
    Bilder
    • 1.jpg

      59,67 kB, 1.192×570, 231 mal angesehen
    • 2.jpg

      160,9 kB, 1.218×572, 225 mal angesehen
    • 3.jpg

      148,42 kB, 1.204×570, 216 mal angesehen
    • 4.jpg

      90,37 kB, 802×304, 221 mal angesehen
    • 5.jpg

      75,57 kB, 646×292, 229 mal angesehen
    Na Moment. In Block#2 löscht Zeile2 das Trade-ListView. D.h. nicht nur die Items, sondern auch die Columns. Und dann erst wird in Codeblock#1 das inzwischen leere LV nach einer bestimmten Spalte durchsucht. Noch Fragen?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.