【问题标题】:VB.Net/C# - Listview GridlinesVB.Net/C# - 列表视图网格线
【发布时间】:2014-04-03 16:29:00
【问题描述】:

如何在我的列表视图中只显示垂直网格线,而不显示水平网格线? 例如在任务管理器中? 有没有办法用 GDI 做到这一点? 我不知道我怎么能意识到,每一个有用的评论都会受到赞赏:)

【问题讨论】:

    标签: c# listview gdi gridlines


    【解决方案1】:

    当你和我创建控件时,我们通常会重载 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++ 也有助于找到正确的消息

    【讨论】:

    • 嘿,感谢您的回复 =) 这已经是一个不错的开始,但是有些事情有点奇怪。如果线条不仅出现在 Listview 内部,就像现在一样,不,我的意思是,直接在创建事件上出现,那就太好了=)另外,在我点击 Listview 内部和绘制线条之后,和然后我调整列标题的大小,线条再次消失。但在我的 Windows 7 系统上,它现在看起来像这样。 ![Windows 7 x64 上的垂直 ListView 行][1] [1]: i.stack.imgur.com/hSGli.png
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 2014-12-08
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多