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

スクロール移動時のラベルの描画について

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

【解決したい問題】

いつも参考にさせて頂いております。

以下のようなプログラミングをしたところ、気になる現象が発生しています。

1.ピクチャーボックスに線を描画します。
2. 線の上に重なるようにラベルを追加します。
  ラベルの背景色(BackColor)は透明(Transparent)に設定します。
3.フォーム上のパネルに上記のピクチャーボックスを追加します。
  この時、ピクチャーボックスのサイズをパネルのサイズより大きく
  設定します。
  パネルのAutoScrollをTrueにしておきます。
  1.〜3.の処理をボタンクリックイベントで実行します。
4.クリックイベント動作後、フォーム上のパネルのスクロールバーを
  左右に動かしているとラベルを貼り付けた位置の線が消えて見える。
  特に、ラベルがパネルの表示範囲外から表示範囲内になる場合に
  現象が発生します。 
  スクロールバーの移動をやめれば、ラベルの背景の線を見えるように
  なるのですが、スクロールバーを移動している際にも背景の線が見えるように
  する方法があるのでしょうか?
  
  今回のような現象については、コントロールの描画方法に影響されて
  仕方のないことなのでしょうか?
  なにか、そういった情報でも結構なので、ご提示くだされば助かります。  

  ボタンクリックイベント時のソースは以下のとおりです。
 
  '---- 参考ソース
  
    'フォーム上のパネルのスクロールバーの自動表示を有効とする。
Me.pnlBase.AutoScroll = True

'描画用ピクチャーボックスの設定
Dim picBase As PictureBox
picBase = New PictureBox
picBase.Width = 100
picBase.Height = 100
picBase.SizeMode = PictureBoxSizeMode.AutoSize

picBase.Image = New Bitmap(1000, 1000)
picBase.BackColor = Color.White

Dim g As Graphics
g = Graphics.FromImage(picBase.Image)

'描画用ピクチャーボックスに線を描画
g.DrawLine(Pens.Black, 10, 10, 500, 10)
g.DrawLine(Pens.Black, 310, 10, 310, 100)

'ラベルの設定
Dim lbl1 As Label
lbl1 = New Label
lbl1.Left = 300
lbl1.Top = 20
lbl1.Height = 20
lbl1.Width = 20
lbl1.BorderStyle = BorderStyle.FixedSingle
lbl1.BackColor = Color.Transparent

'ラベルをピクチャーボックスに追加
picBase.Controls.Add(lbl1)

'グラフィックスオブジェクト廃棄
g.Dispose()

'パネルにピクチャーボックスを追加
Me.pnlBase.Controls.Add(picBase)

  '---- 参考ソース
  
  以上  
  どうかよろしくお願いいたします。

【解決するために何をしたか】
フォームとパネルにダブルバッファの設定を行って確認をしましたが、
現象に変化はありませんでした。
試していませんのでダメかも知れませんが、

Transparent Windows Forms Controls
http://www.bobpowell.net/transcontrols.htm

で紹介されている方法はどうでしょうか?

直接DrawStringで描画したほうが良いような気もするのですが、そうできない事情があるのでしょうか?
■No28431に返信(管理人さんの記事)
> 試していませんのでダメかも知れませんが、
>
> Transparent Windows Forms Controls
> http://www.bobpowell.net/transcontrols.htm
>
> で紹介されている方法はどうでしょうか?
>
> 直接DrawStringで描画したほうが良いような気もするのですが、そうできない事情があるのでしょうか?

返信ありがとうございます。
確かにDrawStringで描画したほうが、簡単だとは認識しているのですが、
線の上をクリックした時のイベントを透明ラベルのクリックイベントで
取得しようと考えてPGを作成している段階で、画面をスクロールさせていたら
ラベル部分が空白表示されるケースを発見したので、何か対応策がないか
投稿させていただきました。

紹介していただいたURLの内容を確認してみます。

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