How can I set an icon for a ListViewSubItem?

☆樱花仙子☆ 提交于 2019-12-28 05:52:34

问题


In a ListView you can have icons on each item.
When viewing in Details-mode, the icon is shown in the left-most column.

Can I show an icon in some other column?


回答1:


The ListView control does not support images in sub-items natively. The easiest thing to do is switch to a DataGridView and use a DataGridViewImageColumn. If that is not possible, then you'll need to draw the icons yourself using the custom draw support in the ListView control. To do this set ListView.OwnerDraw = true and handle the ListView.DrawSubItem and ListView.DrawColumnHeader events.

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;
}



回答2:


Use P/Invoke and send LVM_SETITEM message to the listview (you should set LVS_EX_SUBITEMIMAGES style on control creation or via LVM_SETEXTENDEDLISTVIEWSTYLE), specify the subitem index and the corresponding image index. You will need to do it for every list item you insert.




回答3:


ObjectListView is an open source wrapper around a .NET Winforms ListView. It supports images on subitems using the p/invoke strategy that that @ligget78 mentioned. It also solves many other common problems with a ListView.

It allows you to make very nice looking ListViews with a minimum effort:


(source: sourceforge.net)




回答4:


Inherit from ListView and draw your own icons.

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



回答5:


The icon is shown in the "first" column, and this is also the basis for the keyboard prefix search. One possible solution could be to reorder the columns by setting the DisplayIndex of the first column to something else.

listView1.Columns[0].DisplayIndex = 1;

This of course only works if you need an icon in only one column.




回答6:


There's no .NET support for this.

Have a look at this project.




回答7:


Take a loot at this:

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/d25b4ffa-2ea4-43cd-a3ae-8dd0387197ae/

In addition to the accepted answer, you should handle the DrawItem event as well, or it will not work.



来源:https://stackoverflow.com/questions/1888542/how-can-i-set-an-icon-for-a-listviewsubitem

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!