>source

ListView에서 선택 막대의 기본 (파란색) 색상을 변경하려고합니다.
모든 코드를 변경해야하므로 ObjectListView 사용을 거부하고 있습니다.

이 주제를 검색하여 여기에서 몇 가지 답변을 찾았습니다.
ListView의 배경 선택 색상을 변경 하시겠습니까?
하지만 ObjectListView를 가리 킵니다.

이전에 ListBox를 사용할 때 선택 막대 색상을 원하는대로 설정했습니다.

  1. 드로우 모드를 OwnerDrawFixed 로 설정  속성 아래
  2. DrawItem을 ListBox1_DrawItem 로 설정  이벤트 아래
<시간>

private void ListBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    if (e.Index < 0) return;
    //if the item state is selected them change the back color 
    if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
        e = new DrawItemEventArgs(e.Graphics,
                                  e.Font,
                                  e.Bounds,
                                  e.Index,
                                  e.State ^ DrawItemState.Selected,
                                  e.ForeColor,
                                  Color.FromArgb(43, 144, 188));//Choose the color
    // Draw the background of the ListBox control for each item.
    e.DrawBackground();
    // Draw the current item text
    e.Graphics.DrawString(lb_result.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault);
    // If the ListBox has focus, draw a focus rectangle around the selected item.
    e.DrawFocusRectangle();
}

그러나 이제 ListView를 사용하고 있습니다.

  1. OwnerDraw 를 설정했습니다  True로
  2. DrawItem을 ListView1_DrawItem 로 설정했습니다.  

... 위의 코드를 사용하십시오.

명시된대로 다른 선택 색상을 보여줄 것으로 예상했지만 대신 몇 가지 오류가 발생합니다.

ListView에이 코드를 올바르게 사용하려면 어떻게해야합니까?

  • 답변 # 1

    LitView 컨트롤을 소유하는 것은 ListBox 컨트롤보다 더 복잡합니다. 다음은 ListView의 4 가지보기 설정을 고려한 예입니다.
    와이즈 비즈 View.Details View.List  그리고 View.Tile .

    텍스트 만 여기에 그려져 있습니다.  포함되지 않음), 코드를 적절한 한도까지 포함합니다.
    ListView에 링크 된 ImageList에 포함 된 비트 맵을 그리는 예제는 다음과 같습니다.

    ListView 설정:
    ListView View.SmallIcon 사용 모드를 선택한 다음 샘플 코드에 표시된대로 DrawItem, DrawSubItem 및 DrawColumnHeader 이벤트를 구독합니다 (ListView에 아무 것도 표시하지 않으려면 필수).

    헤더는 기본 렌더링을 사용하여 페인팅됩니다 ( View.LargeIcon ).

    일반 작업에 대한 설명:
    Item Text는 TextRenderer.DrawText를 사용하여 그려집니다. 이것은 ListView가 항목을 그리는 데 사용하는 원래 방법입니다. 기본 렌더링과 정확히 일치하므로 텍스트가 잘못 정렬되지 않습니다.

    와이즈 비즈  이벤트는 모든 OwnerDraw 에서 사용자 정의 배경을 그리는 데 사용됩니다 모드에서View.Details를 제외한 모든 모드에서 항목 텍스트를 표시합니다.  이벤트가 시작됩니다. 우리는 첫 번째 항목의 텍스트를 두 번 그릴 것입니다.  이벤트는 동일한 작업을 수행합니다.

    와이즈 비즈   e.DrawDefault = true 이벤트이 호출되지 않습니다   DrawItem 로 설정  또는 View .

    여기에 제시된 코드에 대한 세부 사항:
    도우미 방법, DrawSubItems , 각 열에 특정 텍스트 정렬이있을 수 있으므로 항목 정렬 설정을 관리합니다.

    필드, DrawItem 는 선택된 항목의 색상을 설정/변경하는 데 사용됩니다. 선택 색상을 수정하려면이 값을 임의의 값으로 설정하고 DrawSubItems ListView : 새 색상이 즉시 적용됩니다.

    결과 샘플:

    View
    
    

    Tile

관련 자료

  • 이전 observable - JavaRX를 사용하여 문서를 소파베이스에 삽입하는 동안 DocumentAlreadyExistsException 예외가 발생하면 다음 문서로 진행하는 방법은 무엇입니까?
  • 다음 javascript - 배열에서 짝수의 합을 반환