C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

DataGridViewButtonの表示テキストを...で

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■94704 / inTopicNo.1)  DataGridViewButtonの表示テキストを...で
  
□投稿者/ yamaP (1回)-(2020/05/07(Thu) 15:48:17)

分類:[VB.NET/VB2005 以降] 

VB2013を使用したWindows Formプログラムを作成しています。
ここでDataGridViewにボタンを表示しているのですが、
最近、ここに表示するテキストで、ボタンをはみ出るものが出てきました。
Form上のButtonコントロールのでは、AutoEllipsisというプロパティがあるのですが、
DataGridViewButtonにはそれらしきプロパティが見当たりません。
(うまく見つけられていないのかも知れません。)

やりたいことは、ボタンの幅に収まるテキストならばそのまま表示(表示位置はMiddleCenter)して、
ボタンの幅に収まらないテキストの場合は文字を...で省略して表示したいです。
どのようにすればよいでしょうか?
CellPaintingイベントを使用しますか?
引用返信 編集キー/
■94705 / inTopicNo.2)  Re[1]: DataGridViewButtonの表示テキストを...で
□投稿者/ Hongliang (1023回)-(2020/05/07(Thu) 22:25:18)
https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/DataGridViewButtonCell.cs,095e1e7ef5eb66ab
ボタンの描画処理を見る限り、プロパティなどでEllipsisを可能にする手段は提供されてなさそうですね。
となると自分で描画処理を書く必要がありそうです。
コンポーネント化する必要がないならCellPaintingイベントでも十分でしょう。
e.Paintメソッドで、e.PaintPartsからContentForegroundだけ取り除いた部分を描画させ、あとはTextRenderer.DrawTextやGraphics::DrawStringを使って描画すればいいかな。
どちらも水平垂直センタリングやRectangleを超えたら省略記号で省略させるような指定が可能です。

// あらゆる環境で正しく表示されることが必要なら、上述のリンクであるようなRectangleの微調整が必要でしょう。
// それほど厳密でなくていいならe.CellBoundsだけでもなんとかなるかな?
引用返信 編集キー/
■94706 / inTopicNo.3)  Re[2]: DataGridViewButtonの表示テキストを...で
□投稿者/ yamaP (2回)-(2020/05/08(Fri) 10:10:18)
> e.Paintメソッドで、e.PaintPartsからContentForegroundだけ取り除いた部分を描画させ、あとはTextRenderer.DrawTextやGraphics::DrawStringを使って描画すればいいかな。
> どちらも水平垂直センタリングやRectangleを超えたら省略記号で省略させるような指定が可能です。

ありがとうございました。
これでうまくいきました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ