2010-05-19 12 views
3

C# Winforms (3.5) 사용.Winforms - ListView 컨트롤의 행 색상을 대체하는 방법?

리스트 뷰에서 자동으로 교체되도록 행 색상을 설정할 수 있습니까?

또는 새 행이 목록보기에 추가 될 때마다 행 색상을 수동으로 설정해야합니까? 수동 방법은 다음과 같이 것 MSDN 기사에 기반

:

//alternate row color 
if (i % 2 == 0) 
{ 
    lvi.BackColor = Color.LightBlue; 
} 
else 
{ 
    lvi.BackColor = Color.Beige; 
} 
+1

제드 스트라이핑은 A List Apart 기사에 따라 테이블을 더 읽기 쉽게 만들 수도 있고하지 않을 수도 있습니다. http://www.alistapart.com/articles/zebrastripingdoesithelp/ – Timothy

+0

+1 - 훌륭한 기사 @ 티모시. 나는 얼룩말 줄무늬로 갈거야. –

답변

5

나는 그 윈폼에있는 유일한 방법입니다 두려워 해요. XAML에서는 스타일 사용을 허용합니다.

+0

@Andre에게 의견을 보내 주셔서 감사합니다. –

0

WPF는 모든 컨트롤에서 스타일을 설정할 수 있다는 것을 알고 있습니다. <Styles/> winforms에서 나는 유일한 방법일지도 모릅니다.

0

속성을 명시 적으로 설정하지 않고 소유자 그리기를 활용할 수도 있습니다. 소유자 도면은 항목 재정렬에 덜 취약합니다.

private void ListViewOnDrawItemBackground(object sender, BetterListViewDrawItemBackgroundEventArgs eventArgs) 
{ 
    if ((eventArgs.Item.Index & 1) == 1) 
    { 
     eventArgs.Graphics.FillRectangle(Brushes.AliceBlue, eventArgs.ItemBounds.BoundsOuter); 
    } 
} 

결과 :

enter image description here

의 문제를 단순히 DrawItemBackground 이벤트를 처리하는의 - 여기

는 (무료 및 확장 두 버전을 모두 제공하는 제 3 자 구성 요소) Better ListView에서이 작업을 수행하는 방법이다

0

ListView OwnerDraw 속성을 true로 설정하고 DrawItem 처리기를 구현하십시오.

private void listView_DrawItem(object sender, DrawListViewItemEventArgs e) 
    { 
     e.DrawDefault = true; 
     if ((e.ItemIndex%2) == 1) 
     { 
      e.Item.BackColor = Color.FromArgb(230, 230, 255); 
      e.Item.UseItemStyleForSubItems = true; 
     } 
    } 

이 예제는 간단한 예제입니다.이를 향상시킬 수 있습니다.

0
 for (int i = 0; i <= listView.Items.Count - 1; i = (i + 2)) 
     { 
      listView.Items[i].BackColor = Color.Gainsboro; 
     } 

: 여기를 보라.

관련 문제