Wie kann ich die Spaltenbreite des ac # winforms- listview
Steuerelements auf auto setzen ? So etwas wie width = -1 / -2?
81
Sie haben die Antwort gegeben: -2 passt die Spalte automatisch an die Länge des Textes in der Spaltenüberschrift an, -1 automatisch an das längste Element in der Spalte. Alles laut MSDN . Beachten Sie jedoch, dass Sie im Fall von -1 die Spaltenbreite nach dem Hinzufügen der Elemente festlegen müssen. Wenn Sie also ein neues Element hinzufügen, müssen Sie auch die width-Eigenschaft der Spalte (oder Spalten) zuweisen, deren Größe Sie gemäß den ListView
kontrollierten Daten ändern möchten .
myListView.Columns[0].Width = -1;
Benutze das:
von hier
quelle
Ich habe ein Programm erstellt, das meine Listenansicht mehrmals gelöscht und wieder aufgefüllt hat. Aus irgendeinem Grund trat beim Hinzufügen von Spalten mit der Breite = -2 ein Problem auf, bei dem die erste Spalte viel zu lang war. Um dies zu beheben, habe ich diese Methode erstellt.
private void ResizeListViewColumns(ListView lv) { foreach(ColumnHeader column in lv.Columns) { column.Width = -2; } }
Das Tolle an dieser Methode ist, dass Sie sie so ziemlich überall platzieren können, um die Größe aller Ihrer Spalten zu ändern. Geben Sie einfach Ihre
ListView
.quelle
Es gibt eine weitere nützliche Methode, mit
AutoResizeColumn
der Sie die Größe einer bestimmten Spalte mit dem erforderlichen Parameter automatisch anpassen können.Sie können es so nennen:
listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent); listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent); listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize); listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);
quelle
Erweitern Sie die Antwort von Fredrik ein wenig, wenn Sie beispielsweise die automatische Größenänderung der Spalte im laufenden Betrieb festlegen möchten: Setzen Sie die automatische Größenbreite der ersten Spalte auf 70:
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None); myListView.Columns[0].Width = 70; myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
quelle
Bei dieser Lösung wird zunächst die Größe der Spalten basierend auf den Spaltendaten geändert. Wenn die Größe der Größe kleiner als die Kopfzeilengröße ist, wird die Größe der Spalten so geändert, dass sie mindestens in die Kopfzeile passen. Dies ist eine ziemlich hässliche Lösung, aber sie funktioniert.
lstContacts.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); colFirstName.Width = (colFirstName.Width < 60 ? 60 : colFirstName.Width); colLastName.Width = (colLastName.Width < 61 ? 61 : colLastName.Width); colPhoneNumber.Width = (colPhoneNumber.Width < 81 ? 81 : colPhoneNumber.Width); colEmail.Width = (colEmail.Width < 40 ? 40 : colEmail.Width);
lstContacts ist die ListView. colFirstName ist eine Spalte, wobei 60 die Breite ist, die zum Anpassen des Titels erforderlich ist. Etc.
quelle
Wenn Sie ListView in einem übergeordneten Bereich haben (ListView-Dockfüllung), können Sie einfach die Methode ...
private void ListViewHeaderWidth() { int HeaderWidth = (listViewInfo.Parent.Width - 2) / listViewInfo.Columns.Count; foreach (ColumnHeader header in listViewInfo.Columns) { header.Width = HeaderWidth; } }
quelle
Sie können so etwas verwenden und die gewünschte ListView in param übergeben
private void AutoSizeColumnList(ListView listView) { //Prevents flickering listView.BeginUpdate(); Dictionary<int, int> columnSize = new Dictionary<int,int>(); //Auto size using header listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); //Grab column size based on header foreach(ColumnHeader colHeader in listView.Columns ) columnSize.Add(colHeader.Index, colHeader.Width); //Auto size using data listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); //Grab comumn size based on data and set max width foreach (ColumnHeader colHeader in listView.Columns) { int nColWidth; if (columnSize.TryGetValue(colHeader.Index, out nColWidth)) colHeader.Width = Math.Max(nColWidth, colHeader.Width); else //Default to 50 colHeader.Width = Math.Max(50, colHeader.Width); } listView.EndUpdate(); }
quelle
Es ist auch erwähnenswert, dass ListView möglicherweise nicht wie erwartet angezeigt wird, ohne zuvor die Eigenschaft zu ändern:
myListView.View = View.Details; // or View.List
Für mich scheint Visual Studio aus irgendeinem Grund standardmäßig View.LargeIcon zu verwenden, sodass nichts angezeigt wird, bis es geändert wird.
Vervollständigen Sie den Code, um eine einzelne Spalte in einer ListView anzuzeigen und Platz für eine vertikale Bildlaufleiste zu schaffen.
lisSerials.Items.Clear(); lisSerials.View = View.Details; lisSerials.FullRowSelect = true; // add column if not already present if(lisSerials.Columns.Count==0) { int vw = SystemInformation.VerticalScrollBarWidth; lisSerials.Columns.Add("Serial Numbers", lisSerials.Width-vw-5); } foreach (string s in stringArray) { ListViewItem lvi = new ListViewItem(new string[] { s }); lisSerials.Items.Add(lvi); }
quelle
Ich glaube, der Autor hat über die IDE nach einer äquivalenten Methode gesucht, die den Code dahinter generiert und sicherstellt, dass alle Parameter vorhanden sind usw. Gefunden von MS:
Erstellen von Ereignishandlern im Windows Forms Designer
Da ich selbst aus einem VB-Hintergrund stamme, war dies das, wonach ich gesucht habe. Hier ist die Kurzversion für den Klick-Nachteil:
quelle