2009-08-10 13 views

Odpowiedz

84

Podałeś odpowiedź: -2 spowoduje autosize kolumny do długości tekstu w nagłówku kolumny, -1 spowoduje automatyczne dopasowanie do najdłuższego elementu w kolumnie. All according to MSDN. Zwróć jednak uwagę, że w przypadku -1, musisz ustawić szerokość kolumny po dodaniu przedmiotu (ów). Jeśli więc dodasz nowy element, musisz również przypisać właściwość width kolumny (lub kolumn), która ma być autosize zgodnie z danymi w sterowaniu ListView.

19

Zrobiłem program, który wielokrotnie czyścił i uzupełniał mój listview. Z jakiegoś powodu, gdy dodawałem kolumny o szerokości = -2 napotkałem problem z zbyt długą pierwszą kolumną. Naprawiłem to, tworząc 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żna ją umieścić w dowolnym miejscu, aby zmienić rozmiar wszystkich kolumn. Po prostu wprowadź swój numer ListView.

+1

będzie ustawić szerokość do szerokości ostatniego elementu w ListView – Qsiris

+0

używam kodu ale jeśli mam tylko jedną kolumnę w moim widoku listy, za każdym razem otrzymuję poziomy pasek przewijania.Jeśli istnieją co najmniej dwie kolumny, kod działa dobrze. Czy wiesz skąd pochodzi to zachowanie? – prototype0815

71

Użyj tego:

yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); 
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); 

z here

+6

Ale co jeśli chcesz uzyskać maksymalną szerokość nagłówka lub danych? Bez migotania? – toddmo

1

Rozwijając nieco na odpowiedź Fredrik jest, jeśli chcesz ustawić auto-resize szerokość kolumny w locie na przykład: ustawienie automatycznego pierwszej kolumnie jest -size width to 70:

myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None); 
myListView.Columns[0].Width = 70; 
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); 
0

To rozwiązanie najpierw zmieni rozmiar kolumn na podstawie danych kolumny, jeśli zmieniona szerokość jest mniejsza r niż rozmiar nagłówka, zmieni rozmiar kolumn, aby przynajmniej pasował 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. Itd

0

wierzę autor szukał innej równoważnej metody poprzez IDE, który generuje kod tyłu i sprawdzić, czy wszystkie parametry były w miejscu, itd. Znalazłem to od MS:

Creating Event Handlers on the Windows Forms Designer

Jadąc od tła VB siebie, to co szukałem, tutaj jest krótka wersja do kliknięcia niekorzystnego:

  1. kliknij formularz lub sterowania, który y ou chcesz utworzyć obsługę zdarzeń dla.
  2. W oknie Właściwości kliknij przycisk Zdarzenia
  3. Na liście dostępnych zdarzeń kliknij wydarzenie, dla którego chcesz utworzyć procedurę obsługi zdarzeń.
  4. W polu po prawej stronie nazwy zdarzenia, wpisz nazwę programu obsługi i naciśnij ENTER
Powiązane problemy