如何检测是否一个winforms DataGridViewCell.值在其单元格中完全可见



我正在寻找一种简单的方法来识别WinForms DataGridViewCell。值在其单元格中完全可见。

如果列太窄,只有部分值是可见的,我需要在代码中检测这种情况。

到目前为止,我认为我可以比较内容的宽度(与Graphics.MeasureString)与单元格的宽度,但这似乎有点笨拙。

如果可能的话,找一些更优雅的东西。

谢谢

从DataGridViewCell的源代码来看,看起来。net团队决定使用TextRenderer MeasureText函数而不是Graphics MeasureString函数(参见第2924行)。这并不完全是你想要的,但它看起来会比检索图形对象少一点笨拙。

除此之外,我不相信有一种方法可以确定地说文本单元格是否正在截断值。这可能与性能有关。DataGrid不为每个单元存储单独的单元格对象…对于大型数据集来说,这太占用内存了。相反,它根据需要存储样式信息(通常用于整个列,不过您也可以根据需要覆盖特定单元格的样式数据)和单元格值(在一个巨大的对象数组中)。当渲染单元格时,它会为列中的每个单元格重用相同的单元格对象(用不同的单元格边界和值等反复调用Paint)。只有在渲染过程中,它才会知道内容是否太长,但它几乎会立即扔掉这些信息(没有地方存储它,渲染后也不需要它)。

我想。net团队本可以为您创建一个函数来完成所有的测量等工作,但话说回来,还有很多特性可以实现。

只是一个想法…

Function IsFit() as Boolean
  Dim szDummy As New SizeF
  dim picDummy as New Picturebox '--> or refer to your picbox
  gDummy = Me.picDummy.CreateGraphics
  szDummy = gDummy.MeasureString(column value , New Font(FontName, _
            FontSize, FontStyle, graphicUnitPixel))
  if szDummy.Width >= MyDataGrid.Columns(column name).Width then return True
End Function

最新更新