如何查看列標題是否在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