none
どうしたらPanel内のPctureBoxを消せますか?(C#) RRS feed

  • 質問

  • 現在VS2008でFormアプリを開発中です。Form内のPanelにPictureBoxを動的に貼り付けています。例えば最初100枚のイメージをPanelの中にPictureBoxを作り、それにロードしています。最初は問題なく描画されます。次に新しい50枚を張り付けたい場合、最初の100枚を消し(Panel.Clear())、新たにそれらの50枚を張り付けます(Panel.Controls.Add(pb[i])).これらも問題なく動くようです。ただ、新たに貼り付けた50枚は、あたかも最初の100枚の後についているように見えます。最初の100枚分のところは「白地」で何もイメージはありません。しかしながら新しい50枚は、100枚分の「白地」の後に描画されます。

    どのようにしたら2回目以降をPanelのトップに貼り付けることができるのでしょうか?

    よろしくお願いします

    2010年10月14日 23:38

回答

  • 最初の100枚を消し(Panel.Clear())、
    Panel に Clear メソッドがありませんので、Panel.Controls.Clear のことですよね?
    ただ、新たに貼り付けた50枚は、あたかも最初の100枚の後についているように見えます。最初の100枚分のところは「白地」で何もイメージはありません。しかしながら新しい50枚は、100枚分の「白地」の後に描画されます。

    Controls.Add を繰り返すと後に追加した方が背面に表示されます。
    Controls.Clear した後に、Controls.Add しても前の PictureBox は残っていません。(手元でも実験済み)
    もしかしたら、うまく消せていないのでは?
    第三者に再現可能なソースコードも提示してください。

    どのようにしたら2回目以降をPanelのトップに貼り付けることができるのでしょうか?

    追加したものを最前面に表示させるには、BringToFront とか、Controls.SetChildIndex で 0 を指定するとか、そういったことが必要です。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 山本春海 2010年10月22日 5:18
    2010年10月15日 14:02
    モデレータ
  • AzuLean様、

    大変お恥ずかしい話ですが、PictureBoxを再生成する際に、スタートPOINTをリセットしていませんでした。リセット後正しく動作することを確認しました。

    ありがとうございました。

    • 回答としてマーク 山本春海 2010年10月22日 5:18
    2010年10月17日 23:40

すべての返信

  • 現在VS2008でFormアプリを開発中です。Form内のPanelにPictureBoxを動的に貼り付けています。例えば最初100枚のイメージをPanelの中にPictureBoxを作り、それにロードしています。最初は問題なく描画されます。次に新しい50枚を張り付けたい場合、最初の100枚を消し(Panel.Clear())、新たにそれらの50枚を張り付けます(Panel.Controls.Add(pb[i])).これらも問題なく動くようです。ただ、新たに貼り付けた50枚は、あたかも最初の100枚の後についているように見えます。最初の100枚分のところは「白地」で何もイメージはありません。しかしながら新しい50枚は、100枚分の「白地」の後に描画されます。

    どのようなコードを記述しているのでしょうか?100枚のイメージを表示するところから50枚のイメージを表示するところまでのソースコードがあったほうが、良い返信が得られやすいと思います。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    2010年10月14日 23:59
  • 最初の100枚を消し(Panel.Clear())、
    Panel に Clear メソッドがありませんので、Panel.Controls.Clear のことですよね?
    ただ、新たに貼り付けた50枚は、あたかも最初の100枚の後についているように見えます。最初の100枚分のところは「白地」で何もイメージはありません。しかしながら新しい50枚は、100枚分の「白地」の後に描画されます。

    Controls.Add を繰り返すと後に追加した方が背面に表示されます。
    Controls.Clear した後に、Controls.Add しても前の PictureBox は残っていません。(手元でも実験済み)
    もしかしたら、うまく消せていないのでは?
    第三者に再現可能なソースコードも提示してください。

    どのようにしたら2回目以降をPanelのトップに貼り付けることができるのでしょうか?

    追加したものを最前面に表示させるには、BringToFront とか、Controls.SetChildIndex で 0 を指定するとか、そういったことが必要です。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 山本春海 2010年10月22日 5:18
    2010年10月15日 14:02
    モデレータ
  • Azulean様、

    いろいろな具体的なご指摘ありがとうございました。再度それらをチェックします。

     

    2010年10月17日 23:15
  • AzuLean様、

    大変お恥ずかしい話ですが、PictureBoxを再生成する際に、スタートPOINTをリセットしていませんでした。リセット後正しく動作することを確認しました。

    ありがとうございました。

    • 回答としてマーク 山本春海 2010年10月22日 5:18
    2010年10月17日 23:40