none
Panelの上にPanelを表示 RRS feed

  • 質問

  • Panelの上にPanelを表示する場合、上のPanelを.visible=trueで表示は出来るが、消す場合、.visible=falseをやると下のPanelに白く跡形が出来る。VB6ではPanelは無かったがpictureコントロールの上にpictureコントロールを表示させる場合、autoredrawプロパティをtrueにして置けば重ねて表示し上をvisible=falseで消したら上のpictureコントロールが消え下のpictureコントロールはそのまま残っていたが、このようなことはvb2008のPanelコントロールやpictureコントロールでは出来ないのでしょうか。教えてください。

    2014年3月7日 8:36

回答

  • グラフィックス (Visual Basic 6.0 ユーザー向け)
    http://msdn.microsoft.com/ja-jp/library/9dtfzwyx(v=vs.90).aspx
    の記述は基本ですが、実際に、以下の環境で試すと、仰られる様な状態にはなりません。
    お確かめ下さい。

    Visual Basic 2008 sp1 Express Edition  os : Win7sp1x86
    Form に PictureBox ふたつ一部重ね合わせ.Image = Image.FromFile で Load
    Button で上の絵を .Visible = False  > ちゃんと下の絵が出て来る

    Panel に e.Graphics で書いた場合には、昔の記憶ですが、仰られる様な状態があったような。

    仰られる様に、全て、PictureBox の重ね合わせ(以前と同じ手法)でやられたら如何でしょうか。
    必要でしたら、一部、透過色指定なども組み合わせて。

    • 編集済み ShiroYuki_Mot 2014年3月8日 7:28 ミススペル訂正
    • 回答の候補に設定 星 睦美 2014年3月11日 2:14
    • 回答としてマーク 星 睦美 2014年3月12日 0:35
    2014年3月8日 7:25

すべての返信

  • Panelの上にPanelを表示する場合、上のPanelを.visible=trueで表示は出来るが、消す場合、.visible=falseをやると下のPanelに白く跡形が出来る。

    Windows8.1 x64、Visual Studio 2012 Update4 および  Visual Studio 2013 で試してみましたが、上記現象は発生しませんでした。どのような環境で開発されてるのでしょうか?

    ひらぽん http://d.hatena.ne.jp/hilapon/


    2014年3月7日 14:09
    モデレータ
  • ご回答有難うございます。開発環境はVistaのVisual Studio2008のVBです。宜しくお願い申し上げます。

    Panelにグラフィックで線を引き、その上にPanel又はPictureBoxを表示させると、.visible=trueで表示はするが、.visible=falseで消すと下のPanelの引いた線が表示した部分だけ消えてしまいます。(簡単な線だけなら再描画すればいいが、実用では複雑な描画の上にPanelやPictureBoxを表示させる。)Panelを全てPictureBoxに変えても同じです。要するにPictureBox又はPanel(どちらを上にしたり、下にしたりしても同じ)を二つ重ねると重なった部分が消える症状です。VB6では出来ていたので.NETでできない筈がなく何か方法が変わったのではないかと思っているのですが。宜しくお願いします。






    • 編集済み gosekiten 2014年3月8日 5:21
    2014年3月8日 4:33
  • グラフィックス (Visual Basic 6.0 ユーザー向け)

    にあるように原則として描画はPaintイベントで行うようになりました。すなわち、Refreshなどで再描画してください。(ちらつきは「vb.net ダブルバッファリング」で対策がでます)

    もしくは、PictureBoxのImageに書き込むことも可能です。もちろん、AutoRedrawと同じように画像分のメモリを消費するので注意です。

    PictureBox上で消える画像&描画・消えない画像&描画 

    その他、VB6との違いが載っているので、取り合えず一読をお勧めします。

    Windows フォーム (Visual Basic 6.0 ユーザー向け)

    • 回答の候補に設定 星 睦美 2014年3月11日 2:14
    2014年3月8日 6:18
  • グラフィックス (Visual Basic 6.0 ユーザー向け)
    http://msdn.microsoft.com/ja-jp/library/9dtfzwyx(v=vs.90).aspx
    の記述は基本ですが、実際に、以下の環境で試すと、仰られる様な状態にはなりません。
    お確かめ下さい。

    Visual Basic 2008 sp1 Express Edition  os : Win7sp1x86
    Form に PictureBox ふたつ一部重ね合わせ.Image = Image.FromFile で Load
    Button で上の絵を .Visible = False  > ちゃんと下の絵が出て来る

    Panel に e.Graphics で書いた場合には、昔の記憶ですが、仰られる様な状態があったような。

    仰られる様に、全て、PictureBox の重ね合わせ(以前と同じ手法)でやられたら如何でしょうか。
    必要でしたら、一部、透過色指定なども組み合わせて。

    • 編集済み ShiroYuki_Mot 2014年3月8日 7:28 ミススペル訂正
    • 回答の候補に設定 星 睦美 2014年3月11日 2:14
    • 回答としてマーク 星 睦美 2014年3月12日 0:35
    2014年3月8日 7:25
  • ご回答有難うございました。Paintイベントで解決しました。PanelもPaintイベントでOKでした。有難うございました。


    • 編集済み 星 睦美 2014年3月12日 0:32 Shiroyuki_Mot さんから回答頂きました。
    2014年3月11日 12:35