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

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

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

Re[4]: DataGridView の描画について


(過去ログ 11 を表示中)

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

■2343 / inTopicNo.1)  DataGridView の描画について
  
□投稿者/ ひちょり (1回)-(2007/04/03(Tue) 12:02:10)

分類:[C# (Windows)] 

こんにちは。
DataGridView を2つ上下にならべ上がデータ表示、下が合計表示しています。
データが多い場合は大丈夫なのですが、少ない場合、
DataGridView の背景にセルの幅に合わせて縦ラインを引きたいと考えてます。

そこで、Scroll イベントで背景を一度塗りつぶしてから、ラインを引いたのですが
素早くスクロールを行うと、うまくラインが描画されません。

ソースにTrace.WriteLineを埋め込んで引いたライン数を数えてみると、きちんとラインを引いているようなので
描画が追いついていないような動作です。

何とか上手く動作させたいのですが、どなたかご教授いただけないでしょうか?

下記は作成したソースになります。
なお、開発環境はWindowsXP SP2、Visual Studio 2005 になりServicePack1は当てておりません。

Graphics graphics = this.dataGridView.CreateGraphics();

//カラムの幅(セルのcolumnのWidthは全て同一)
int columnWidth = dataGridView.Columns[0].Width;

//ラインを描画する際の上端と下端(セルのRowのHeightは全て同一)
int yBackgroundTop = dataGridView.ColumnHeadersHeight + dataGridView.RowCount * dataGridView.Rows[0].Height - dataGridView.VerticalScrollingOffset + 1;
int yBackgroundBottom = dataGridView.Height;

//一番左端のラインのX座標の取得
int x;
if (dataGridView.FirstDisplayedScrollingColumnHiddenWidth == 0) {
x = dataGridView.RowHeadersWidth;
}
else {
x = columnWidth - dataGridView.FirstDisplayedScrollingColumnHiddenWidth + dataGridView.RowHeadersWidth;
}

//一度、四角形で塗りつぶす。
graphics.FillRectangle(Brushes.Gray, dataGridView.FirstDisplayedScrollingColumnHiddenWidth, yBackgroundTop, dataGridView.Width, yBackgroundBottom);

//ラインを引く
while (x < dataGridView.Width) {
graphics.DrawLine(new Pen(Color.DarkGray), x, yBackgroundTop, x, yBackgroundBottom);
x += columnWidth;
}
引用返信 編集キー/
■2355 / inTopicNo.2)  Re[1]: DataGridView の描画について
□投稿者/ かずくん (2回)-(2007/04/03(Tue) 22:49:17)
No2343 (ひちょり さん) に返信
> そこで、Scroll イベントで背景を一度塗りつぶしてから、ラインを引いたのですが
> 素早くスクロールを行うと、うまくラインが描画されません。
>
Scrollイベントではなく、Paintイベントで描画したらどうなる?
引用返信 編集キー/
■2361 / inTopicNo.3)  Re[2]: DataGridView の描画について
□投稿者/ ひちょり (2回)-(2007/04/04(Wed) 10:19:51)
2007/04/04(Wed) 10:33:15 編集(投稿者)
2007/04/04(Wed) 10:33:14 編集(投稿者)
2007/04/04(Wed) 10:33:08 編集(投稿者)
2007/04/04(Wed) 10:33:07 編集(投稿者)

かずくんさん。
ありがとうございます。
paintイベントで上手くいきました。
引用返信 編集キー/
■2362 / inTopicNo.4)  Re[3]: DataGridView の描画について
□投稿者/ ひちょり (3回)-(2007/04/04(Wed) 10:32:20)
No2361 (ひちょり さん) に返信
> ■No2355 (かずくん さん) に返信
>>■No2343 (ひちょり さん) に返信
> >>そこで、Scroll イベントで背景を一度塗りつぶしてから、ラインを引いたのですが
> >>素早くスクロールを行うと、うまくラインが描画されません。
> >>
>>Scrollイベントではなく、Paintイベントで描画したらどうなる?
>
> かずくん さん、ご返信ありがとうございます。
> Paintイベントで試してみたのですが、やっぱりだめみたいです。
> ラインが描画されていない状態で、
> 別のウィンドウを前面に持ってきて画面を隠し、その後再度画面をアクティブにするとラインが描画されるような動作をします。
> マシンとかの環境のせいなのでしょうかね?
引用返信 編集キー/
■2363 / inTopicNo.5)  Re[4]: DataGridView の描画について
□投稿者/ ひちょり (5回)-(2007/04/04(Wed) 10:33:28)
No2362 (ひちょり さん) に返信
> ■No2361 (ひちょり さん) に返信
>>■No2355 (かずくん さん) に返信
> >>■No2343 (ひちょり さん) に返信
>>>>そこで、Scroll イベントで背景を一度塗りつぶしてから、ラインを引いたのですが
>>>>素早くスクロールを行うと、うまくラインが描画されません。
>>>>
> >>Scrollイベントではなく、Paintイベントで描画したらどうなる?
>>
>>かずくん さん、ご返信ありがとうございます。
>>Paintイベントで試してみたのですが、やっぱりだめみたいです。
>>ラインが描画されていない状態で、
>>別のウィンドウを前面に持ってきて画面を隠し、その後再度画面をアクティブにするとラインが描画されるような動作をします。
>>マシンとかの環境のせいなのでしょうかね?
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -