如何检测winforms DataGridViewCell.Value是否在其单元格中完全可见?

如何检测winforms DataGridViewCell.Value是否在其单元格中完全可见?,winforms,datagridviewtextboxcell,Winforms,Datagridviewtextboxcell,我正在寻找一种识别WinForms DataGridViewCell.Value是否在其单元格中完全可见的简单方法 如果列太窄,只有部分值可见,我需要在代码中检测这种情况 到目前为止,我认为我可以比较内容的宽度(带有Graphics.MeasureString)和单元格的宽度,但这似乎有点笨拙 如果可能的话,寻找更优雅的东西 谢谢只是个主意 函数IsFit()为布尔值 Dim szDummy作为新的SizeF 将picDummy调暗为新的Picturebox'-->或参考您的Picturebox

我正在寻找一种识别WinForms DataGridViewCell.Value是否在其单元格中完全可见的简单方法

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

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

如果可能的话,寻找更优雅的东西

谢谢

只是个主意

函数IsFit()为布尔值
Dim szDummy作为新的SizeF
将picDummy调暗为新的Picturebox'-->或参考您的Picturebox
gDummy=Me.picDummy.CreateGraphics
szDummy=gDummy.MeasureString(列值,新字体(FontName_
FontSize、FontStyle、graphicUnitPixel)
如果szDummy.Width>=MyDataGrid.Columns(列名).Width,则返回True
端函数
从中可以看出,.NET团队似乎决定使用MeasureText函数而不是Graphics MeasureString函数(参见第2924行)。这并不完全是你想要的,但它看起来比检索图形对象要简单一些

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


我想.NET团队本可以为您创建一个函数来完成所有的测量等工作,但也有。这个不是。

使用。啊,是的,我的意思是测量,而不是拉绳,哎呀!问题编辑!谢谢。我认为测量是你最好的选择。我相信OP是在寻找测量以外的答案。“到目前为止,我认为我可以将内容的宽度(带有图形。MeasureString)与单元格的宽度进行比较,但这似乎有点笨重。如果可能的话,寻找更优雅的东西。”此外,创建PictureBox涉及各种不必要的开销。如果你要走那条路,可能会更好。@Cyborgx37:你说得对。。这只是一个想法。。picbox仅适用于Creategraphics methode。。我相信还有比这个更好的主意谢谢你。使用TextRenderer进行处理(以前没有遇到过),并且正如您所说的,比检索图形对象更简单。