如何查看列标题是否在Datagridview
中可见?DataGridView:查看ColumnHeaders是否真的可见
由于Datagridview
控件在禁用时未绘制为禁用状态,因此我试图通过在左上角绘制一个小锁图标来模拟此操作。由于这看起来很糟糕,如果在列标题上绘制,我想将它移到它们下面。
但是我发现ColumnHeadersVisible
和ColumnHeadersHeight
属性在所有情况下都不会给出准确的值。有时候他们最初是这样做的,但是在数据被添加和删除之后,例如,该属性再次出错。
这可以通过将下面的类新项目,一旦运行该项目,并添加NewDGV
控制的形式很容易地复制。即使在Designer中,您也可以看到矩形在错误的位置绘制。
Public Class NewDGV
Inherits DataGridView
Protected Overrides Sub OnPaint(e As PaintEventArgs)
MyBase.OnPaint(e)
Dim y As Integer = 0
'Get the location to draw a rectangle to
If Me.ColumnHeadersVisible Then
'y = Me.ColumnHeadersHeight + 1 gives the wrong value as well
y = Me.GetCellDisplayRectangle(-1, -1, False).Height + 1
Else
y = 1
End If
e.Graphics.FillRectangle(Brushes.Azure, 1, y, 30, 30)
End Sub
End Class
这里没有进一步修改的结果:
正如你可以看到,即使头都清晰可见(不会有任何实际列有反正),矩形被绘制在错误的位置。
编辑:我可能没有完全清楚:每当列标题不可见时,我希望矩形出现在左上角而没有额外的空间到顶部。当列标题可见时,我希望矩形出现在标题单元格下方(意思是从顶部距离ColumnHeadersHeight
像素绘制)。
我该如何解决这个问题,并找到列标题是否真的可见?
答案在两个VB.NET或C#,无论你喜欢,我们非常感激。
您是否尝试过检查的Columns.Count? – TaW
@TaW这实际上是一个很好的解决方法,我没有想过,我认为它的工作原理。所以'ColumnHeadersVisible'似乎没有考虑到这一点。不会的WinForms没有摆弄;-) – Jens
我认为你应该通过在DataGridView中定义一个锁的PictureBox和控制它的Visible属性改变你的方法。 – Graffito