首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ListView中将图像绘制到subItem

在ListView中将图像绘制到subItem
EN

Stack Overflow用户
提问于 2009-06-26 17:06:52
回答 3查看 18.8K关注 0票数 5

My Listview是在详细信息视图中设置的,具有以下列标题:

图像名称||图像位置||图像大小||图像预览

我想知道有没有办法在第四栏画一张图。我知道的唯一方法,就是设置

代码语言:javascript
复制
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事件的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-11 08:33:18

listView1_DrawColumnHeaderlistView1_DrawItem事件处理程序中,您应该将以下内容

代码语言:javascript
复制
e.DrawDefault = true;

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

票数 1
EN

Stack Overflow用户

发布于 2010-12-17 03:04:25

我就是碰到了这个。

@zidane's answer几乎是正确的。我想把实际需要做的事情贴出来,这样人们以后再看的时候就不用自己弄明白了。

仅使用e.DrawDefault = true;和子项绘图处理DrawColumnHeader。实际上,如果您在DrawItem事件中设置了e.DrawDefault = true;,则DrawSubItem事件永远不会触发,假设您希望绘制整个行,而不关心子项。

唯一真正的代码是用DrawSubItem编写的,使用以下基本结构:

代码语言:javascript
复制
if (/* condition to determine if you want to draw this subitem */)
{
    // Draw it
}
else
    e.DrawDefault = true;
票数 7
EN

Stack Overflow用户

发布于 2012-09-25 10:56:02

在前面答案的基础上,下面是一个完整的VB.NET示例:

代码语言:javascript
复制
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 Class
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1050185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档