[c#] C # ListView 열 너비 자동
ac # winforms listview
컨트롤 의 열 너비를 어떻게 자동으로 설정할 수 있습니까 ? width = -1 / -2?
답변
답 : -2는 열 머리글의 텍스트 길이로 열 크기를 자동 조정하고 -1은 열에서 가장 긴 항목의 크기를 자동으로 조정합니다. 모두 MSDN에 따라 . -1의 경우 항목을 추가 한 후 열 너비를 설정해야합니다. 따라서 새 항목을 추가하는 경우 ListView
제어중인 데이터에 따라 자동 크기 조정하려는 열 (또는 열)의 너비 속성도 할당해야합니다 .
답변
이것을 사용하십시오 :
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
에서 여기
답변
목록보기를 여러 번 지우고 다시 채우는 프로그램을 만들었습니다. 어떤 이유로 너비 = -2 열을 추가 할 때마다 첫 번째 열이 너무 길다는 문제가 발생했습니다. 이 문제를 해결하기 위해 내가 한 일은이 방법을 만드는 것입니다.
private void ResizeListViewColumns(ListView lv)
{
foreach(ColumnHeader column in lv.Columns)
{
column.Width = -2;
}
}
이 방법의 가장 좋은 점은 모든 열의 크기를 조정하기 위해 어느 곳에 나 배치 할 수 있다는 것입니다. 그냥 전달 ListView
.
답변
AutoResizeColumn
필요한 매개 변수를 사용하여 특정 열의 크기를 자동으로 조정할 수있는 또 다른 유용한 방법 이 있습니다.
다음과 같이 부를 수 있습니다.
listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize);
listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);
답변
예를 들어 열의 자동 크기 조정 너비를 즉석에서 설정하려는 경우 Fredrik의 답변에 대해 조금 확장 : 첫 번째 열의 자동 크기 너비를 70으로 설정 :
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None);
myListView.Columns[0].Width = 70;
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
답변
이 솔루션은 먼저 열 데이터를 기반으로 열 크기를 조정합니다. 크기가 조정 된 너비가 머리글 크기보다 작 으면 최소한 머리글에 맞도록 열 크기를 조정합니다. 이것은 매우 추악한 솔루션이지만 작동합니다.
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는 ListView입니다. colFirstName은 열이며 여기서 60은 제목을 맞추는 데 필요한 너비입니다. 기타.
답변
부모 패널 (ListView 도크 채우기)에 ListView가있는 경우 간단한 방법을 사용할 수 있습니다.
private void ListViewHeaderWidth() {
int HeaderWidth = (listViewInfo.Parent.Width - 2) / listViewInfo.Columns.Count;
foreach (ColumnHeader header in listViewInfo.Columns)
{
header.Width = HeaderWidth;
}
}