将图像绘制到ListView中的子项

5 c# listview winforms

我的列表视图在详细信息视图中设置,其中包含以下列标题:

图像名称|| 图像位置|| 图像尺寸|| 图像预览

我想知道是否有办法在第4栏中绘制图像.我知道的唯一方法就是设定

this.listview1.OwnerDraw = true
this.listView1.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(listView1_DrawColumnHeader);
this.listView1.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(listView1_DrawItem);
this.listView1.DrawSubItem += new System.Windows.Forms.DrawListViewSubItemEventHandler(listView1_DrawSubItem);
Run Code Online (Sandbox Code Playgroud)

这个问题是我必须自己处理所有listview绘图...我想知道是否有更好的方法将图像绘制到subItem,或者是否有办法只处理DrawSubItem事件?

Jon*_*gel 7

我刚碰到这个.

@ zidane的答案几乎是正确的.我想发布实际需要做的事情,以便后来回读的人不必自己解决这个问题.


仅处理DrawColumnHeader使用e.DrawDefault = true;和子项目绘图.实际上,如果你e.DrawDefault = true;DrawItem事件中设置,DrawSubItem事件永远不会触发,大概是假设你想绘制整行并且不关心子项.

DrawSubItem使用这个基本结构,唯一真正的代码是:

if (/* condition to determine if you want to draw this subitem */)
{
    // Draw it
}
else
    e.DrawDefault = true;
Run Code Online (Sandbox Code Playgroud)


zid*_*ane 1

在事件处理listView1_DrawColumnHeader程序中listView1_DrawItem你应该把它

e.DrawDefault = true;
Run Code Online (Sandbox Code Playgroud)

它将使用列和项目的默认绘图实现,您所要做的就是仅为子项目编写自己的实现。