ListView Spalten breite autom. anpassen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von bla.

    ListView Spalten breite autom. anpassen

    Moin moin,

    gibt es eine Möglichkeit, dass sich die Breite einer Spalten eines ListView Controls automatisch ihrem Inhalt anpassen?
    Ich habe bereits rausgefunden das mit width = -1 auf länge des Inhalts angepasst wird unr mit -2 auf länge der Headercolumn. Nur solls auf den längsten Inhalt angepasst werden. Heißt wenn die Header Column 5 Zeichen hat aber in der Zeile selber nur 2 Zeichen solls so breit wie der Header sein. Andersrum wenn der Zeileninhalt größer bzw. länger ist auf den Inhalt.
    Nein, obs nun mit den Enums oder eben manuell die Witdh auf -1 oder -2 zu setzten ist ja egal. Mir gehts darum herauszufinden ob er die Spalte eben an den Header oder an den Content anpassen soll. Wenn der HeaderText z.b. 5 Zeichen lang ist und der Content 2 Zeichen soll die spalte natürlich dem Header angepasst werden damit man die Spaltenüberschrift lesen kann.
    Wenn diese nru 2 Zeichen ist und der maximale Content 5 Zeichen soll die Spalte natürlich an den Content angepasst werden.
    Nur für alle nachfolgenden die auf diesen Thread stoßen, weil sie sich darüber den Kopf zerbrechen. Das ganze sind nur 2 Zeilen Code:

    VB.NET-Quellcode

    1. ​ ListView1.Columns(0).AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent)
    2. If ListView1.Columns(1).Width < 60 Then ListView1.Columns(0).Width = 60


    oder als Schleife:

    VB.NET-Quellcode

    1. For i As Integer = 0 To ListView1.Columns.Count - 1
    2. ListView1.Columns(i).AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent)
    3. If ListView1.Columns(i).Width < 60 Then ListView1.Columns(i).Width = 60
    4. Next


    Die 60 muss natürlich gegen die Breite ausgetauscht werden, die der Column mindestens haben muss, damit der Name vollständig angezeigt wird.
    Der anzusteuernde Collum muss ebenfalls noch an den jeweiligen Code angepasst werden (bei der Schleife nicht).
    Hallo,
    Ich grabe den Thread mal aus.

    Meine Lösung für das Problem war Folgende:

    VB.NET-Quellcode

    1. Private Sub LV_Spaltenbreiten_anpassen(LV As ListView)
    2. For i As Integer = 0 To LV.Columns.Count - 1
    3. Dim Breite1, Breite2 As Integer
    4. LV.Columns(i).AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize)
    5. Breite1 = LV.Columns(i).Width
    6. LV.Columns(i).AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent)
    7. Breite2 = LV.Columns(i).Width
    8. LV.Columns(i).Width = Math.Max(Breite1, Breite2)
    9. Next
    10. End Sub


    Klappt eigentlich auch, aber:
    durch "LV.Columns(i).AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize)" wird die letzte Spalte immer voll ausgedehnt und somit bei rechtsbündiger Ausrichtung nach ganz außen (rechts) gerückt, was ich nicht möchte. Kann man da was machen?
    Oder gibts es inzwischen eine neue Methode zur automatischen Spaltenanpassung?
    Ich habe bereits eine VB6-Methode mittels API ausprobiert, welche allerdings das selbe Problem hervorruft.
    Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!