My Listview是在详细信息视图中设置的,具有以下列标题:
图像名称||图像位置||图像大小||图像预览
我想知道有没有办法在第四栏画一张图。我知道的唯一方法,就是设置
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);这样做的问题是我必须自己处理所有列表视图的绘制。我想知道是否有更好的方法将图像绘制到subItem中,或者是否有只处理DrawSubItem事件的方法?
发布于 2009-08-11 08:33:18
在listView1_DrawColumnHeader和listView1_DrawItem事件处理程序中,您应该将以下内容
e.DrawDefault = true;它将使用列和项的默认绘图实现,您所要做的就是只为子项编写自己的实现。
发布于 2010-12-17 03:04:25
我就是碰到了这个。
@zidane's answer几乎是正确的。我想把实际需要做的事情贴出来,这样人们以后再看的时候就不用自己弄明白了。
仅使用e.DrawDefault = true;和子项绘图处理DrawColumnHeader。实际上,如果您在DrawItem事件中设置了e.DrawDefault = true;,则DrawSubItem事件永远不会触发,假设您希望绘制整个行,而不关心子项。
唯一真正的代码是用DrawSubItem编写的,使用以下基本结构:
if (/* condition to determine if you want to draw this subitem */)
{
// Draw it
}
else
e.DrawDefault = true;发布于 2012-09-25 10:56:02
在前面答案的基础上,下面是一个完整的VB.NET示例:
Public Class MyListView : Inherits System.Windows.Forms.ListView
Public Sub New()
MyBase.New()
MyBase.OwnerDraw = True
End Sub
Protected Overrides Sub OnDrawSubItem(ByVal e As DrawListViewSubItemEventArgs)
If x Then ' condition to determine if you want to draw this subitem
' draw code goes here
Else
e.DrawDefault = True
End If
MyBase.OnDrawSubItem(e)
End Sub
Protected Overrides Sub OnDrawColumnHeader(ByVal e As DrawListViewColumnHeaderEventArgs)
e.DrawDefault = True
MyBase.OnDrawColumnHeader(e)
End Sub
Protected Overrides Sub OnDrawItem(e As System.Windows.Forms.DrawListViewItemEventArgs)
e.DrawDefault = True
MyBase.OnDrawItem(e)
End Sub
End Classhttps://stackoverflow.com/questions/1050185
复制相似问题