[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;
        }
    }