2009-12-11 5 views

답변

10

ListView 컨트롤은 하위 항목의 이미지를 기본적으로 지원하지 않습니다. 가장 쉬운 방법은 DataGridView으로 전환하고 DataGridViewImageColumn을 사용하는 것입니다. 그럴 수 없다면 ListView 컨트롤의 사용자 정의 그리기 지원을 사용하여 아이콘을 직접 그려야합니다. 이렇게하려면 ListView.OwnerDraw = true을 설정하고 ListView.DrawSubItemListView.DrawColumnHeader 이벤트를 처리하십시오.

private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) 
{ 
    // Only interested in 2nd column. 
    if (e.Header != this.columnHeader2) 
    { 
     e.DrawDefault = true; 
     return; 
    } 

    e.DrawBackground(); 
    var imageRect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height); 
    e.Graphics.DrawImage(SystemIcons.Information.ToBitmap(), imageRect); 
} 

private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) 
{ 
    e.DrawDefault = true; 
} 
+0

왜 그냥'var imageRect = e.Bounds; '가 아닌 값을 복사하고 참조하지 않기 때문에 처리하기가 안전합니다. – ja72

+0

실제 사용에서는 하위 항목에 포함 된 맞춤, 패딩 및/또는 추가 내용을 설명하기 위해 imageRect를 조정할 수 있습니다. –

2

상속의 ListView에서 자신 만의 아이콘을 그립니다.

public class MyListView : ListView 
{ 
    protected override void OnDrawSubItem(System.Windows.Forms.DrawListViewSubItemEventArgs e) 
    { 
     base.OnDrawSubItem(e); 
    } 
} 
6

사용 P/호출과 목록보기에 LVM_SETITEM 메시지를 보낼 수는 (당신은 제어 작성 또는 LVM_SETEXTENDEDLISTVIEWSTYLE를 통해 LVS_EX_SUBITEMIMAGES 스타일을 설정해야합니다) 하위 항목의 인덱스와 해당 이미지 인덱스를 지정합니다. 삽입하는 모든 목록 항목에 대해이 작업을 수행해야합니다.

5

ObjectListView은 .NET Winforms ListView를 둘러싼 오픈 소스 래퍼입니다. 그것은 @ ligget78이 언급 한 p/invoke 전략을 사용하여 하위 항목에 대한 이미지를 지원합니다. 또한 ListView에서 자주 발생하는 여러 가지 문제를 해결합니다.

그것은 당신이 최소한의 노력으로 아주 좋은 찾고의 ListView를 만들 수 있습니다

:

alt text http://objectlistview.sourceforge.net/cs/_images/fancy-screenshot2.png

0

"첫 번째"열에 아이콘이 표시되며 이는 키보드 접두사 검색의 기초이기도합니다. 한 가지 가능한 솔루션은 첫 번째 열의 DisplayIndex를 다른 것으로 설정하여 열을 재정렬하는 것입니다.

listView1.Columns[0].DisplayIndex = 1; 

물론이 기능은 하나의 열에 만 아이콘이 필요한 경우에만 작동합니다.

관련 문제