Laden...

automatisch horizontale Scrollbar in ListView

Erstellt von Christel vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.704 Views
C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 16 Jahren
automatisch horizontale Scrollbar in ListView

Hallo,

ich habe ein ListView mit 2 Spalten. Die Spaltenbreiten sind so vordefiniert, dass standardmäßig keine horizontale Scrollbar erscheint. Die Listview wird während der Programmlaufzeit mit Meldungen befüllt, deren Länge ich nicht kenne. Manche überschreiten die Spaltenbreite und werden dann nur unvollständig (abgeschnittener Text, ergänzt mit "...") angezeigt. Eine Scrollbar erscheint nicht.

Wie kann ich erreichen, dass sie ListView nicht einfach den Text kürzt und mit "..." ergänzt, sondern automatisch die horizontale Scrollbar einblendet?
Habe schon im Forum und im Netz gewühlt, finde aber nichts geniales.

Danke, Christel

Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.

B
196 Beiträge seit 2007
vor 16 Jahren

Die horizontale Scrollbar erscheint automatisch. In deinem Fall kommt sie nicht weil nicht das rechte Ende deines Listviews die Anzeige begrenzt sondern das rechte Ende deiner letzten Spalte.
Wenn du die Spaltenbreite erhöhst (so das der komplette text angezeigt wird) wird falls nötig die Scrolleiste eingeblendet.

your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself

C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 16 Jahren

Danke, das habe ich verstanden.
Wenn ich die Spaltenbreite von Anfang an erhöhe, ist die Scrollbar immer sichtbar (und das ist unschön). Somit muss ich die Spaltenbreite bei BEDARF erhöhen. Aber was ist das Kriterium für Bedarf? Die Textlänge? Bei nicht-proportionalen Fonts wie MS Sans Serif ist diese nicht aussagekräftig.
Danke, Christel

Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.

B
196 Beiträge seit 2007
vor 16 Jahren

Mir fällt nur ein weg sein und den hast du selbst schon erkannt (und seine Schwächen auch)

your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself

C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 16 Jahren

Ich danke Dir trotzdem.
Ich finde es ja persönlich gar nicht so schlimm, wenn die Spalte groß genug ist und die Scrollbar dann immer da ist. Aber mein Chef 😉
Ich werde weiterforschen.
Gruß, Christel

Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.

915 Beiträge seit 2006
vor 16 Jahren

Hrm, du kannst beim Füllen anhand der ListView Font und mit Graphics MeasureString die größe berechnen und herausfinden ob der Text der grade zur laufzeit eingefügt werden soll größer als die With des Clientbereichs ist. Wenn ja kannst du ja <ListView>.Scrollable = true schalten. Falls nicht dann ist der Wert auf false. Das wäre der einfachste Weg.

Man kann es aber auch noch komplexer machen wenn der Lösungsweg nicht in ordnung wäre 😮)

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

2.760 Beiträge seit 2006
vor 16 Jahren

Meiner Meinung nach wäre das hier sicherlich der komfortabelste Weg 😉


listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);

5.299 Beiträge seit 2008
vor 16 Jahren

Oder gleich auf DataGridView umsteigen.
Da kannste an den Spalten
System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells
einstellen, und brauchst dich gar nicht mehr drum zu kümmern.

Der frühe Apfel fängt den Wurm.

C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 16 Jahren

Danke an alle für Eure Hilfe.
Ich habe das Problem jetzt so gelöst, dass ich die Spaltenbreite zur Laufzeit mittels Graphics MeasureString festlege. Die automatische Spaltenbreite gefällt mir insofern nicht, dass bei sehr kurzen Texten die Spalte schmal wird und eine weitere ungewünschte Spalte erscheint.
Beim nächsten Mal fange ich lieber gleich mit DataGridView an.
Gruß, Christel

Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.

915 Beiträge seit 2006
vor 16 Jahren

Danke an alle für Eure Hilfe.
Ich habe das Problem jetzt so gelöst, dass ich die Spaltenbreite zur Laufzeit mittels Graphics MeasureString festlege. Die automatische Spaltenbreite gefällt mir insofern nicht, dass bei sehr kurzen Texten die Spalte schmal wird und eine weitere ungewünschte Spalte erscheint.
Beim nächsten Mal fange ich lieber gleich mit DataGridView an.
Gruß, Christel

Meiner Meinung nach wäre das hier sicherlich der komfortabelste Weg 😉

  
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);  
  

😜

/ps Hattest schon recht jaensen 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

2.760 Beiträge seit 2006
vor 16 Jahren

😁 Manchmal sieht man halt den Wald vor lauter Bäumen nicht mehr. Aber die Performance ist dabei auch unter aller Sau je nach dem wie oft man es aufruft.