首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OwnerDrawn时无法对Listview项目进行居中

使用OwnerDrawn时无法对Listview项目进行居中
EN

Stack Overflow用户
提问于 2014-02-12 00:08:54
回答 1查看 329关注 0票数 1

当试图自定义绘制我的彩色标题和列表查看项时,我得到的是锯齿状的文本(而不是反别名),这看起来很糟糕。我看到了下面的代码片段来呈现文本并更好地显示--这是可行的。然而,我想不出如何把我的文字放在专栏的中心。目前,将我的标志设置为HorizontalCentre实际上将文本集中在整个listview控件中。

代码语言:javascript
复制
Private Sub lsvOverdueCalls_DrawItem(sender As Object, e As DrawListViewItemEventArgs) Handles lsvOverdueCalls.DrawItem
    If e.Item.Selected AndAlso e.Item.ListView.Focused Then
        e.Item.BackColor = SystemColors.Highlight
        e.Item.ForeColor = e.Item.ListView.BackColor
    ElseIf e.Item.Selected AndAlso Not e.Item.ListView.Focused Then
        e.Item.BackColor = SystemColors.Control
        e.Item.ForeColor = e.Item.ListView.ForeColor
    Else
        e.Item.BackColor = e.Item.ListView.BackColor
        e.Item.ForeColor = e.Item.ListView.ForeColor
    End If

    e.DrawBackground()

    ' Draw the header text.
    Dim rec As New Rectangle(e.Bounds.X + 2, e.Bounds.Y + 2, e.Bounds.Width - 4, e.Bounds.Height - 4)
    Dim flags As TextFormatFlags = TextFormatFlags.HorizontalCenter Or TextFormatFlags.EndEllipsis Or TextFormatFlags.ExpandTabs Or TextFormatFlags.SingleLine
    TextRenderer.DrawText(e.Graphics, e.Item.Text, e.Item.ListView.Font, rec, e.Item.ForeColor, flags)
End Sub

我的结果是:

我需要呼叫号码(26155)坐在呼叫ID列的中心。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-12 03:22:41

e.Bounds是整个宽度。若要获取列的宽度,请尝试引用ListView列的宽度属性。

如果您给列键,请按键引用它们:

代码语言:javascript
复制
listView1.Columns("callID").Width

或索引:

代码语言:javascript
复制
listView1.Columns(0).Width

然后,您的绘图矩形将如下所示:

代码语言:javascript
复制
Dim colWidth As Integer = listView1.Columns("callID").Width
Dim rec As New Rectangle(e.Bounds.X, e.Bounds.Y, _
                         colWidth, e.Bounds.Height)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21715958

复制
相关文章

相似问题

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