lei*_*ren 13 .net c# listview listviewitem winforms
在ListView中,您可以在每个项目上添加图标.
在详细信息模式下查看时,图标显示在最左侧的列中.
我可以在其他列中显示图标吗?
小智 13
该ListView控件本身不支持子项中的图像.最简单的方法是切换到a DataGridView并使用a 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;
}
使用P/Invoke并将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
| 归档时间: | 
 | 
| 查看次数: | 13802 次 | 
| 最近记录: |