當嘗試自定義繪製我的coloumn標題和列表視圖項目時,出現鋸齒形文字(不是反鋸齒),看起來很糟糕。我遇到了以下代碼片段,以便更好地呈現文本和顯示 - 這很有效。但是,我無法弄清楚如何將文本置於列中。目前,將我的標誌設置爲HorizontalCentre實際上是將文本置於整個列表視圖控件中。使用OwnerDrawn時無法居中列表視圖項目
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列的中心。
' e.Bounds'是整個寬度。您的Call ID列的寬度是多少? – LarsTech
Call ID列的寬度是80.我可以引用列的邊界還是需要對值進行硬編碼?我已經嘗試使用e.Item.Bounds,但我仍然得到相同的結果。 – Riples
如果你給你的列鍵,你可以只引用寬度:'listView1.Columns(「callID」).Width',否則,索引順序'listView'.Columns(0).Width'等 – LarsTech