WinForms DataGridViewCell.Value がそのセルに完全に表示されているかどうかを識別する簡単な方法を探しています。
列が狭すぎると、値の一部しか表示されないため、コードでその状況を検出する必要があります。
これまでのところ、コンテンツの幅 (Graphics.MeasureString を使用) とセルの幅を比較できると考えていますが、それは少しぎこちないようです。
可能であれば、もう少しエレガントなものを探しています。
ありがとう
WinForms DataGridViewCell.Value がそのセルに完全に表示されているかどうかを識別する簡単な方法を探しています。
列が狭すぎると、値の一部しか表示されないため、コードでその状況を検出する必要があります。
これまでのところ、コンテンツの幅 (Graphics.MeasureString を使用) とセルの幅を比較できると考えていますが、それは少しぎこちないようです。
可能であれば、もう少しエレガントなものを探しています。
ありがとう
DataGridViewCellのソース コードを見ると、.NET チームは Graphics MeasureString 関数ではなくTextRenderer MeasureText 関数を使用することを決定したようです (2924 行を参照)。それはまさにあなたが探していたものではありませんが、Graphics オブジェクトを取得する必要がある場合よりも少し面倒ではないようです。
それ以上に、テキスト セルが値を切り捨てているかどうかを確実に判断する方法があるとは思いません。これはおそらくパフォーマンスに関係しています。DataGrid は、セルごとに個別のセル オブジェクトを格納しません。これは、大規模なデータ セットにはメモリを大量に消費します。むしろ、必要に応じてスタイル情報 (通常は列全体、必要に応じて特定のセルのスタイル データをオーバーライドできます) とセル値 (巨大なオブジェクト配列) を格納します。セルをレンダリングする段階になると、列内の各セルに同じセル オブジェクトが再利用されます (異なる cellBounds と値で 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