TreeView Problem

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Blaupunkt79.

    TreeView Problem

    Moin,

    ich habe mal mit dem TreeView Element experimentiert, da ich einzelne Einträge in der normalen "Listbox" farbig haben wollte.

    Ich benötige allerdings eine mehrspaltige Liste und genau hier habe ich wohl einen Denkfehler.

    Folgender Code zeigt die Daten an:

    VB.NET-Quellcode

    1. With SAM1.TreeView1
    2. .FullRowSelect = True
    3. .HideSelection = False
    4. .LabelEdit = tvwManual
    5. nummer2 = Worksheets("Tabelle3").Range("d" & Rows.Count).End(xlUp).Row
    6. nummer3 = 19
    7. start88:
    8. If Worksheets("Tabelle3").Range("d" & nummer3) = "" Then GoTo weiter88
    9. a = Worksheets("Tabelle3").Cells(nummer3, 2).Value
    10. b = Worksheets("Tabelle3").Cells(nummer3, 4).Value
    11. c = Worksheets("Tabelle3").Cells(nummer3, 5).Value
    12. d = Worksheets("Tabelle3").Cells(nummer3, 6).Value
    13. e = Worksheets("Tabelle3").Cells(nummer3, 7).Value
    14. f = Worksheets("Tabelle3").Cells(nummer3, 9).Value
    15. a = a & String(35 - Len(a), " ")
    16. b = b & String(50 - Len(b), " ")
    17. c = c & String(20 - Len(c), " ")
    18. d = d & String(40 - Len(d), " ")
    19. e = e & String(30 - Len(e), " ")
    20. If Worksheets("Tabelle3").Range("k" & nummer3) = "" Then
    21. .Nodes.Add(Text:=a & b & c & d & e & f).ForeColor = vbBlack
    22. Else
    23. .Nodes.Add(Text:=a & b & c & d & e & f).ForeColor = vbRed
    24. End If
    25. nummer3 = nummer3 + 1
    26. GoTo start88
    27. weiter88:
    28. End With


    Anzeigen tut er mir allerdings die Daten "ein wenig" durcheinander ... ibb.co/dAVZH8

    Wo liegt mein Fehler?

    Danke

    Gruß
    1. Bitte über [Erweiterte Antwort] die foreninterne Bilduploadfunktion nutzen.
    2. Programmierst Du in VBA oder holst Du die Daten nur aus Excel, um damit im Visual Studio weiterzuarbeiten?
    3. Du bastelst mit nem TreeView in einem Node Strings aneinander. Was erwartest Du? Falls Du mit VB.Net arbeites, schau mal auf's DataGridView (was man sehr schön gestalten kann).
    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.
    Ok, dann für's nächste Mal nicht den VB.Net-CodeButton verwenden, sondern den VB6. Aber ist ja sekundär.
    Zum Problem: Wenn Du beim TreeView bleiben willst, bleibt m.E. nur : Nicht nur die Texte einfach so aneinanderreihen, sondern
    1. eine Monospace-Schriftart verwenden
    2. die Abstände zwischen den Tetiltexten flexibel gestalten, dann klappt's auch mit dem Aussehen.
    Ein Beispiel:
    Du hast die Zeilen "Apfel Birne Zitrone" und "Wein Wasser Mineralwasser"
    Dann die oberen Punkte abarbeiten. Der erste ist noch leicht:
    "Apfel Birne Zitrone" und "Wein Wasser Mineralwasser" -> "Apfel Birne Zitrone" und "Wein Wasser Mineralwasser"; dadurch haben alle Zeichen den gleichen Abstand voneinander
    Der 2. Punkt erfordert Programmierung, ist aber insofern leicht, weil Du quasi nur ein bisken rumrechnen und probieren musst. Du siehst dann mit der Monospace-Font, wieviele Zeichen es braucht, um einen adäquaten Abstand zu bekommen. Dann den ersten Teil dem Node hinzufügen, von der Soll-Zeichenzahl die Länge des ersten Textes abziehen und den Rest eben mit Leerzeichen füllen. Dann der nächste Text.
    =>
    "Apfel.....Birne......Zitrone"
    "Wein......Wasser.....Mineralwasser"

    (WordPress verhindert die Darstellung mehrerer Leerzeichen, daher mit Punkten aufgefüllt)
    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.
    Ich hab mich inzwischen gegen "TreeView" entschieden und bin auf "Listview" umgestiegen, da geht die Formatierung einfacher.

    Auch erfolgt der Aufbau/Aktualisierung der "Listview" deutlich schneller als "Treeview". Für diejenigen, die es interessiert:

    Visual Basic-Quellcode

    1. Dim nummer2 As Long
    2. Dim a As String
    3. Dim b As String
    4. Dim c As String
    5. Dim d As String
    6. Dim e As String
    7. Dim f As String
    8. Dim i As Integer
    9. Dim i1 As Integer
    10. Dim j As Long
    11. nummer2 = Worksheets("Tabelle3").Range("d" & Rows.Count).End(xlUp).Row
    12. With SAM1.ListView1
    13. .ColumnHeaders.Add , , "Artikelnummer", 120
    14. .ColumnHeaders.Add , , "Artikelname", 260
    15. .ColumnHeaders.Add , , "I-EK", 80
    16. .ColumnHeaders.Add , , "I-VK", 100
    17. .ColumnHeaders.Add , , "VA", 120
    18. .ColumnHeaders.Add , , "Preis", 60
    19. .View = 3
    20. nummer3 = 19
    21. i = 1
    22. start88:
    23. If Worksheets("Tabelle3").Range("d" & nummer3) = "" Then GoTo weiter88
    24. a = Worksheets("Tabelle3").Cells(nummer3, 2).Value
    25. b = Worksheets("Tabelle3").Cells(nummer3, 4).Value
    26. c = Worksheets("Tabelle3").Cells(nummer3, 5).Value
    27. d = Worksheets("Tabelle3").Cells(nummer3, 6).Value
    28. e = Worksheets("Tabelle3").Cells(nummer3, 7).Value
    29. f = Worksheets("Tabelle3").Cells(nummer3, 9).Value
    30. With .ListItems.Add(Text:=a)
    31. .SubItems(1) = b
    32. .SubItems(2) = c
    33. .SubItems(3) = d
    34. .SubItems(4) = e
    35. .SubItems(5) = f
    36. End With
    37. If Worksheets("Tabelle3").Range("k" & nummer3) = "" Then
    38. .ListItems(i).ForeColor = vbBlack
    39. .ListItems(i).Selected = True
    40. .SelectedItem.ListSubItems(1).ForeColor = vbBlack
    41. .SelectedItem.ListSubItems(2).ForeColor = vbBlack
    42. .SelectedItem.ListSubItems(3).ForeColor = vbBlack
    43. .SelectedItem.ListSubItems(4).ForeColor = vbBlack
    44. .SelectedItem.ListSubItems(5).ForeColor = vbBlack
    45. .ListItems(i).Selected = False
    46. Else
    47. .ListItems(i).ForeColor = vbRed
    48. .ListItems(i).Selected = True
    49. .SelectedItem.ListSubItems(1).ForeColor = vbRed
    50. .SelectedItem.ListSubItems(2).ForeColor = vbRed
    51. .SelectedItem.ListSubItems(3).ForeColor = vbRed
    52. .SelectedItem.ListSubItems(4).ForeColor = vbRed
    53. .SelectedItem.ListSubItems(5).ForeColor = vbRed
    54. .ListItems(i).Selected = False
    55. End If
    56. nummer3 = nummer3 + 1
    57. i = i + 1
    58. GoTo start88
    59. weiter88:
    60. End With


    Gruß