- PR -

VB.NET DataGrid内2行表示の際のセンタリング

1
投稿者投稿内容
nana
会議室デビュー日: 2004/06/29
投稿数: 17
投稿日時: 2004-11-12 18:34
どなたかおわかりでしたら教えていただきたく投稿しました。

現在 VB.NETでDataGridを使用したいと考えています。
DataGridの2行表示は解決したのですが
 → http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16450&forum=7&2

今度は、二行分の幅に一行のデータを表示する際に
上に表示されてしまい下に一行分スペースが空いてしまう状態になってしまい困っています。

WEBも本も様々探しているのですが、
DataGrid内の
右、左、真ん中のセンタリングの方法は載っていても
上、下、真ん中のセンタリング方法を探し出すことができないでいます。

もしかしたら、VB .NET DataGrid内では
上、下、真ん中のセンタリングの設定方法はなく、
実現させたい場合は自分でプログラムを組み込むしかないのでしょうか。
(横位置を左詰め、縦位置を中央揃えを実現させたいと思っています。)

たとえば、もし
簡単に実現可能な方法をご存知の方がいらっしゃいましたら
ご教授いただければうれしいです。
宜しくお願いいたします。
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-11-14 15:19
Osです。

標準のDataGridは複数行表示を想定していないので、
要望の上・下・センタリングの機能も標準では用意されていません。
従って、自分でプログラムする必要があります。

実現するには、2行表示を解決する為に引用したサンプルの
Paintメソッド内の描画領域を、文字の描画高さで補正することで
中央に配置することが可能です。

簡単なサンプルです。

Dim rectf As New RectangleF(bounds.X, bounds.Y, _
bounds.Width, bounds.Height)
rectf.Inflate(-_margin.X, -_margin.Y)

'==========この部分を挿入=================
'描画文字高さを求める
Dim drawSize As SizeF = g.MeasureString(([text], _
DataGridTableStyle.DataGrid.Font, rectf.Size, sf)

'文字を行の中央に配置する為、高さ方向位置を補正
rectf.Y += Fix((rect.Height - drawSize.Height) * 0.5)

'===========ここまで挿入=================

'文字列を描画する
g.DrawString([text], DataGridTableStyle.DataGrid.Font, _
foreBrush, rectf, sf)

以上

[ メッセージ編集済み 編集者: Os_ 編集日時 2004-11-14 15:20 ]
nana
会議室デビュー日: 2004/06/29
投稿数: 17
投稿日時: 2004-11-15 09:01
ありがとうございます。できました!

本当に助かりました。
ありがとうございました。
nana
会議室デビュー日: 2004/06/29
投稿数: 17
投稿日時: 2004-11-15 10:13
取り急ぎお礼のみの返信となりましたが
Osさん、本当にありがとうございました。

まだまだVBは勉強不足のため
サンプルソースの記述は実のところ
本当にたすかりました。
(こんなことじゃまだまだダメですね・・・)

後進の方へ
MeasureStringクラスは引数の違いでいくつか種類があり
さらに自分でカスタマイズすることもできると思います。
参考にしてください。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdrawinggraphicsclassmeasurestringtopic.asp

お互い頑張りましょう!
nana@

[ メッセージ編集済み 編集者: nana 編集日時 2005-02-03 09:44 ]
1

スキルアップ/キャリアアップ(JOB@IT)