Jak ustawić szerokość kolumny listview
kontrolki ac # winforms na auto. Coś jak szerokość = -1 / -2?
82
Podałeś odpowiedź: -2 automatycznie dostosuje rozmiar kolumny do długości tekstu w nagłówku kolumny, -1 spowoduje automatyczne dopasowanie rozmiaru do najdłuższego elementu w kolumnie. Wszystko zgodnie z MSDN . Zauważ jednak, że w przypadku -1 będziesz musiał ustawić szerokość kolumny po dodaniu elementu (ów). Jeśli więc dodasz nowy element, będziesz musiał również przypisać właściwość szerokości kolumny (lub kolumn), które chcesz automatycznie zmieniać zgodnie z ListView
kontrolowanymi danymi .
myListView.Columns[0].Width = -1;
Użyj tego:
od tutaj
źródło
Zrobiłem program, który wielokrotnie czyścił i uzupełniał mój widok listy. Z jakiegoś powodu za każdym razem, gdy dodawałem kolumny o szerokości = -2, napotkałem problem z pierwszą kolumną, która była zbyt długa. Aby to naprawić, stworzyłem tę metodę.
private void ResizeListViewColumns(ListView lv) { foreach(ColumnHeader column in lv.Columns) { column.Width = -2; } }
Wspaniałą rzeczą w tej metodzie jest to, że możesz ją umieścić w dowolnym miejscu, aby zmienić rozmiar wszystkich kolumn. Po prostu podaj swój
ListView
.źródło
Jeśli masz ListView w dowolnym panelu nadrzędnym (wypełnienie dokowania ListView), możesz użyć prostej metody ...
private void ListViewHeaderWidth() { int HeaderWidth = (listViewInfo.Parent.Width - 2) / listViewInfo.Columns.Count; foreach (ColumnHeader header in listViewInfo.Columns) { header.Width = HeaderWidth; } }
źródło
Jest jeszcze jedna przydatna metoda,
AutoResizeColumn
która umożliwia automatyczne dopasowanie rozmiaru określonej kolumny z wymaganym parametrem.Możesz to nazwać tak:
listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent); listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent); listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize); listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);
źródło
Rozwijając nieco odpowiedź Fredrika, jeśli chcesz ustawić szerokość automatycznej zmiany rozmiaru kolumny w locie, na przykład: ustawienie szerokości automatycznego rozmiaru pierwszej kolumny na 70:
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None); myListView.Columns[0].Width = 70; myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
źródło
To rozwiązanie najpierw zmieni rozmiar kolumn na podstawie danych kolumny, jeśli zmieniona szerokość jest mniejsza niż rozmiar nagłówka, zmieni rozmiar kolumn, aby przynajmniej pasowały do nagłówka. To dość brzydkie rozwiązanie, ale działa.
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 to ListView. colFirstName to kolumna, gdzie 60 to szerokość wymagana do dopasowania tytułu. Itp.
źródło
Możesz użyć czegoś takiego, przekazując ListView, który chcesz w param
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(); }
źródło
Warto również zauważyć, że ListView może nie wyświetlać się zgodnie z oczekiwaniami bez uprzedniej zmiany właściwości:
myListView.View = View.Details; // or View.List
Wydaje mi się, że Visual Studio z jakiegoś powodu domyślnie ustawia go na View.LargeIcon, więc nic się nie pojawia, dopóki nie zostanie zmienione.
Uzupełnij kod, aby wyświetlić pojedynczą kolumnę w ListView i zwolnić miejsce na pionowy pasek przewijania.
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); }
źródło
Uważam, że autor szukał równoważnej metody za pośrednictwem IDE, która wygenerowałaby kod i upewniła się, że wszystkie parametry są na miejscu, itp. Znalazłem to z MS:
Tworzenie programów obsługi zdarzeń w Projektancie formularzy systemu Windows
Wychodząc z tła VB, właśnie tego szukałem, oto krótka wersja niekorzystnego kliknięcia:
źródło