Hallo,
ich kämpfe noch mit einem Listview. Es ist durch Splitter von anderen Controls abgetrennt.
Jetzt würde ich gern die zwei Spalten des Listviews immer über die ganze Breite verteilen, auch dann wenn sich die Breite des Listviews ändert oder die Breite der Spalten verändert wird.
Irgendwie finde ich dazu nichts. Gibt´s da eine schicke Lösung.
Besten Dank antoschka
Selbst ausrechnen beim Resize Event der Listview...
Gruss Ari
Wer lesen kann ist klar im vorteil!
MSDN
Dein Feund in allen fragen
Hallo antoschka,
Ich hoffe ich hab verstanden was du meinst.
Probiers mal mit:
listView1.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
für die zweite Spalte:
listView1.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
Oder über Graphics.MeasureString (mit ItemText) die längste Breite auslesen und als ColumnWidth setzen.
mFg
Mädels die sich die wimpern pinseln, sind auch die die beim pimpern winseln 😉
Frauen sind wie Wolken, wenn sie weg sind wird es schön
Besten Dank für die Antworten.
Es ist etwas komplizierter. Ich habe zu einem ListView eine DataSource hinzugefügt. Wenn die Daten fertig geladen sind soll die Breite beider Spalten identisch sein.
this.Columns[0].Width = this.Width/2 -1;
this.Columns[1].Width = -2;
Wenn ich die Spaltenbreite verändere (ColumnWidthChanged event) soll die andere Spalte den Rest ausfüllen:
foreach (ColumnHeader column in this.lvwEmployee.Columns)
{
if (column.Index != e.ColumnIndex) column.Width = -2;
}
Dumm nur, dass durch den ersten Code-Schnippsel auch das Event ausgelöst wird - somit wird die erste Spalte wieder zusammengeschoben und die zweite füllt den Rest aus 🙁
Wie kann ich oben verhindern, dass das event ausgelöst wird?
Besten Dank
antoschka
Hallo antoschka,
brauchst du gar nicht. Frage am Anfang des EventHandler einfach eine boolsche Variable ab und verlasse den EventHandler, wenn sie gesetzt ist. Setze die boolsche Variable vor der Codestelle, die den Event unerwünschterweise auslöst, und setze sie danach zurück.
herbivore
Besten Dank. Der Tipp brachte die Lösung. Dummerweise habe ich noch einen Sorter implementiert und der hat auch noch die events ausgelöst.
Ich musste also das changed event immer unterdrücken mit Ausnahme wenn jemand wirklich die Spaltenbreite im Form geändert hat - und dann wird ja changing ausgelöst, wo ich die Variable setzen konnte.
MIt Resize gabe es den gleichen Ärger. Hier mal die Lösung
private void lvwEmployee_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
{
if (this.lvwEmployee.isDataSourceMyOrigin == false)
{
foreach (ColumnHeader column in this.lvwEmployee.Columns)
{
if (column.Index != e.ColumnIndex) column.Width = -2;
}
}
}
private void lvwEmployee_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
{
this.lvwEmployee.isDataSourceMyOrigin = false;
}
private void lvwEmployee_Resize(object sender, EventArgs e)
{
bool firstColumn = true;
foreach (ColumnHeader currentColumn in this.lvwEmployee.Columns)
{
if (firstColumn != true)
{
firstColumn = false;
}
else
{
this.lvwEmployee.isDataSourceMyOrigin = true;
currentColumn.Width = -2;
}
}
}
Besten Dank noch mal antoschka