今担当しているプロジェクトでは、グリッドを作成するのにグレープシティの FlexGrid.NET2.0J (4.0 に更新しようとしたら稟議が降りなかったorz)を使用しています。
要求仕様上、二つのグリッドを連携させる必要が出てきたんですが、片方のスクロールバーの表示状態によっては、もう片方のグリッドが想定通りに連動しない場合がありました。
で、それを回避するためにはスクロールバーの幅がわかればいいんですが、 DOBON.NET にそのものずばりの方法が書かれていましたので、メモ代わりに転載します。
// 水平スクロール バーの高さ (ピクセル単位)
Console.WriteLine("HorizontalScrollBarHeight:{0}",
SystemInformation.HorizontalScrollBarHeight);
// 垂直スクロール バーの幅 (ピクセル単位)
Console.WriteLine("VerticalScrollBarWidth:{0}",
SystemInformation.VerticalScrollBarWidth);
SystemInformation クラスって、いろいろな情報を取り出せて便利ですね。
ところが、FlexGrid ってスクロールバーが小さくなることがなかったっけ? とか、そもそもどちらのグリッドにもスクロールバーが表示されないケースの対応はどうしようとか考えていたら、もっとスマートな方法がありました。
// C1.Win.C1FlexGrid.C1FlexGrid fgdGrid; として、
// 水平スクロールバーの高さ
Console.WriteLine("HorizontalScrollBarHeight:{0}",
fgdGrid.Height - fgdGrid.DisplayRectangle.Height);
// 垂直スクロールバーの幅
Console.WriteLine("VerticalScrollBarWidth:{0}",
fgdGrid.Width - fgdGrid.DisplayRectangle.Width);
コントロールのサイズと表示領域の矩形は取得できるんですから、そこから計算した方が早いですね。
……そういえば、ボーダーの取り扱いってどうなるんだろう?