C#을 사용하여 ListView에서 단일 서브 시템의 텍스트를 어떻게 정렬합니까?

StackOverflow https://stackoverflow.com/questions/561798

  •  05-09-2019
  •  | 
  •  

문제

이 겉보기에 간단한 주제에 대한 답을 찾을 수 없었습니다. WinForms ListView Control에서 단일 하위 요소의 텍스트를 정렬 할 수 있습니까?

그렇다면 어떻게?

같은 열에 텍스트를 다르게 정렬하고 싶습니다.

도움이 되었습니까?

해결책 4

향후 참조를 위해 다음은 다음과 같습니다.

// Make owner-drawn to be able to give different alignments to single subitems
lvResult.OwnerDraw = true;
...

// Handle DrawSubItem event
private void lvResult_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
    // This is the default text alignment
    TextFormatFlags flags = TextFormatFlags.Left;

    // Align text on the right for the subitems after row 11 in the 
    // first column
    if (e.ColumnIndex == 0 && e.Item.Index > 11)
    {
        flags = TextFormatFlags.Right;
    }

    e.DrawText(flags);
}

// Handle DrawColumnHeader event
private void lvResult_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    // Draw the column header normally
    e.DrawDefault = true;
    e.DrawBackground();
    e.DrawText();
}

DrawColumnheader를 처리해야했습니다. 그렇지 않으면 텍스트 나 열 분리기가 그려지지 않습니다.

다른 팁

"ColumnHeader"클래스에는 "텍스트 라인"속성이있어 열의 모든 하위 항목에 대한 정렬을 변경합니다. 더 멋진 것이 필요한 경우 항상 "DrawSubitem"이벤트를 사용하여 소유자로 만들 수 있습니다.

예시 :

listView1.Columns[1].TextAlign = HorizontalAlignment.Right;

열의 "1"정렬을 오른쪽으로 설정합니다.

참고 : 기본 기본 ListView Control (comctl32.dll에 살고 있음)의 제한으로 인해 첫 번째 열을 정렬 할 수 없습니다. 항상 왼쪽으로 정렬됩니다. 두 번째 제한 사항은 사용자 정의 그리기 (사용자 정의 그리기 서브 오티 템)의 경우입니다. 열 재정 주문을 활성화하면 첫 번째 열의 텍스트가 올바르게 재정렬되지 않습니다. ListView가 많은 목록 스타일을 지원하고 목록보기의 내부 데이터 구조가 하나와 같은 트리이기 때문에이 제한을 해결하지 못했습니다. 첫 번째 열을 다시 주문하지 않음으로써 대부분의 경우 문제가되지 않습니다. , 숫자 나 유사한 것과 같은 첫 번째 열에 어떤 종류의 키를 사용할 수 있기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top