ListView에서 각 항목에 아이콘을 표시 할 수 있습니다.
세부 정보 모드에서 볼 때 가장 왼쪽에 아이콘이 표시됩니다.ListViewSubItem에 대한 아이콘을 설정하려면 어떻게해야합니까?
다른 컬럼에 아이콘을 표시 할 수 있습니까?
ListView에서 각 항목에 아이콘을 표시 할 수 있습니다.
세부 정보 모드에서 볼 때 가장 왼쪽에 아이콘이 표시됩니다.ListViewSubItem에 대한 아이콘을 설정하려면 어떻게해야합니까?
다른 컬럼에 아이콘을 표시 할 수 있습니까?
ListView
컨트롤은 하위 항목의 이미지를 기본적으로 지원하지 않습니다. 가장 쉬운 방법은 DataGridView
으로 전환하고 DataGridViewImageColumn
을 사용하는 것입니다. 그럴 수 없다면 ListView
컨트롤의 사용자 정의 그리기 지원을 사용하여 아이콘을 직접 그려야합니다. 이렇게하려면 ListView.OwnerDraw = true
을 설정하고 ListView.DrawSubItem
및 ListView.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;
}
.NET 지원이 없습니다.
상속의 ListView에서 자신 만의 아이콘을 그립니다.
public class MyListView : ListView
{
protected override void OnDrawSubItem(System.Windows.Forms.DrawListViewSubItemEventArgs e)
{
base.OnDrawSubItem(e);
}
}
사용 P/호출과 목록보기에 LVM_SETITEM 메시지를 보낼 수는 (당신은 제어 작성 또는 LVM_SETEXTENDEDLISTVIEWSTYLE를 통해 LVS_EX_SUBITEMIMAGES 스타일을 설정해야합니다) 하위 항목의 인덱스와 해당 이미지 인덱스를 지정합니다. 삽입하는 모든 목록 항목에 대해이 작업을 수행해야합니다.
ObjectListView은 .NET Winforms ListView를 둘러싼 오픈 소스 래퍼입니다. 그것은 @ ligget78이 언급 한 p/invoke 전략을 사용하여 하위 항목에 대한 이미지를 지원합니다. 또한 ListView에서 자주 발생하는 여러 가지 문제를 해결합니다.
그것은 당신이 최소한의 노력으로 아주 좋은 찾고의 ListView를 만들 수 있습니다:
alt text http://objectlistview.sourceforge.net/cs/_images/fancy-screenshot2.png
이에서 전리품을 가지고 : 허용 대답에 추가
http://social.msdn.microsoft.com/forums/en-US/winforms/thread/d25b4ffa-2ea4-43cd-a3ae-8dd0387197ae/
, 당신 DrawItem 이벤트도 처리해야합니다. 그렇지 않으면 작동하지 않습니다.
"첫 번째"열에 아이콘이 표시되며 이는 키보드 접두사 검색의 기초이기도합니다. 한 가지 가능한 솔루션은 첫 번째 열의 DisplayIndex를 다른 것으로 설정하여 열을 재정렬하는 것입니다.
listView1.Columns[0].DisplayIndex = 1;
물론이 기능은 하나의 열에 만 아이콘이 필요한 경우에만 작동합니다.
왜 그냥'var imageRect = e.Bounds; '가 아닌 값을 복사하고 참조하지 않기 때문에 처리하기가 안전합니다. – ja72
실제 사용에서는 하위 항목에 포함 된 맞춤, 패딩 및/또는 추가 내용을 설명하기 위해 imageRect를 조정할 수 있습니다. –