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

时间:2013-05-15 14:06:26

标签: winforms datagridviewtextboxcell

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

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

到目前为止,我认为我可以将内容的宽度(使用Graphics.MeasureString)与单元格的宽度进行比较,但这看起来有点笨重。

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

由于

2 个答案:

答案 0 :(得分:0)

只是一个想法..

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

答案 1 :(得分:0)

source code for DataGridViewCell看,看起来.NET团队决定使用TextRenderer MeasureText函数而不是Graphics MeasureString函数(参见第2924行)。它并不完全是你想要的,但看起来它不那么笨重,然后必须检索一个Graphics对象。

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

我认为.NET团队可以创建一个函数来为您完成所有测量等,但是再次有a lot of features that could have been implemented。这不是。