VB.Net/C# - Listview网格线

时间:2014-03-02 20:25:55

标签: c# listview gdi gridlines

如何在Listview中只显示垂直网格线,没有水平网格线? 比如在taskmanager中? 有没有办法用GDI做到这一点? 我不知道如何才能意识到这一点,我们非常感谢所有有用的评论:)

1 个答案:

答案 0 :(得分:0)

当你和我创建控件时,我们通常重载onPaint方法并在那里完成所有绘图。但是,您在工具箱中找到的大多数默认控件都会在某些消息上重绘某些部分,这使得很难绘制它们,因为您永远不知道控件何时会重绘。然而,有可能这样做,并且确定何时绘制的唯一方法是通过跟踪和错误。

如果你很幸运,只需重新绘制几个事件,但是,在大多数情况下,重载WndProc方法是可行的方法。

我目前在Windows 8计算机上,根本没有绘制网格线,因此很难写出如何移除水平线的好例子,但我只是用它们画出来背景颜色,然后绘制垂直颜色。下面的代码绘制了水平网格线:

Public Class MyListView
Inherits ListView

Private Sub DrawLines() Handles Me.MouseUp
    Dim G = CreateGraphics()
    Dim x As Integer

    For i = 0 To Columns.Count - 1
        x += Columns(i).Width
        G.DrawLine(New Pen(Color.FromArgb(230, 230, 230)), x, 0, x, Height)
    Next
End Sub

Protected Overrides Sub WndProc(ByRef m As Message)
    MyBase.WndProc(m) ' To prevent something from drawing you can simply not do this call at a specific message
End Sub

End Class

A list of windows messages

Spy ++也可以帮助您找到正确的消息