DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewに背景画像を表示したい

環境/言語:[OS : Windows XP Professional / 言語 : Visual Basic .NET / .NET Framework : 2.0]
分類:[.NET]

【解決したい問題】

いつも参考にさせて頂いています。
DataGridViewの背景全体に1枚画像(写真)を表示させたいのですが、
このようなことは可能でしょうか?
セル内でのイメージ描画ならできるのですが・・・

ちなみに背景色を透明にしてみようと思ったのですが、
「プロパティの値が無効です。'BackgroundColor' の色を透明色に
設定することはできません。」のエラーになりました。
> いつも参考にさせて頂いています。
> DataGridViewの背景全体に1枚画像(写真)を表示させたいのですが、
> このようなことは可能でしょうか?
> セル内でのイメージ描画ならできるのですが・・・

背景というのは、セルの部分ではなく、それ以外の通常は灰色の部分でしょうか?そうであれば、DataGridViewのPaintBackgroundをオーバーライドして画像を表示するということになるのではないでしょうか。
背景は、セルの部分とそれ以外の灰色の部分を合わせた領域です。
つまり列見出しを除く全領域となります。説明不足ですみませんでした。

ご指摘のPaintBackgroundをオーバーライドというのがよく分からなかったので
検索したところ、背景画像を表示する以下のサンプルが見つかりました。
これにOverrides Sub PaintBackgroundとありました。

Set image as background for DataGridView
http://www.codeproject.com/KB/dotnet/Datagridview_BackImage.aspx

(※セルの背景色を透明にすることで全体に背景画像を表示できました)

これを試してみたのですが、この方法ではスクロールした際に画像が乱れるようです。

私のやりたいことは、スクロールが発生しても固定位置に背景画像を表示することです。

ところがこのサンプルでは、スクロールして現れる新しい領域には、意図する
位置に意図する画像の部位が表示されるのですが、スクロールにより移動した
領域は、背景画像が一緒に移動しています。たぶん、必要のある部分だけ描画
することで処理を軽くしているせいだと思うのですが…

言葉では表現しにくいので図示↓

初期状態

セルの行 背景画像の特定部分
1 A
2 B
3 C

下に1行スクロール
理想

2 A
3 B
4 C

現状

2 B
3 C
4 C

Scrollイベントで Me.Refresh とすることで理想の表示にできるのですが、
スクロールの最中、背景画像がちらついてしまいます。

私の見つけたこのサンプルが良くないのだと思いますが、他に見つけることが
できませんでした。

これを実現するのは困難なのでしょうか?
> ご指摘のPaintBackgroundをオーバーライドというのがよく分からなかったので
> 検索したところ、背景画像を表示する以下のサンプルが見つかりました。
> これにOverrides Sub PaintBackgroundとありました。
>
> Set image as background for DataGridView
> http://www.codeproject.com/KB/dotnet/Datagridview_BackImage.aspx
>
> (※セルの背景色を透明にすることで全体に背景画像を表示できました)
>
> これを試してみたのですが、この方法ではスクロールした際に画像が乱れるようです。

私が考えていた方法もこのような方法です。この方法がうまくいかないとなると、私にはちょっと分かりません。申し訳ありません。

DOBON.NET | プログラミング道 | プログラミング掲示板