• ベストアンサー

フォームのピクチャーボックスの内容の退避

動的に変わるピクチャーボックスの内容を以下の配列変数に設定したいのです。 dim Pct(X) as picturebox set pct(X) = form1.picture1 同じピクチャーボックスを表示したい場合は、以下のように変数から画面に設定したいのです。 set form1.picture1 = pict(X) が、退避しているはずなのに、全てがおなじピクチャーになってしまいます。 そんなことってありますか? 私が間違っているところがあれば、教えてください。 ピクチャーの内容は、VBからExcelのグラフを編集した後、クリップボード経由でピクチャーボックスに貼り付けたものです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

そんなことあります。(^_^; というのは、これは退避していないからです。 Set AAA = BBB というのは、参照先をセットしているだけで、中身はコピーされません。言い換えると「 AAA で見ているのは BBB ですよ。」ということです。 Set CCC = BBB として、CCC を使って何か変更すると、一つだけ存在する実体(BBB が実体の場合もある)に変更が加えられるわけですが、AAA が見ているものも CCC が見ているものも同じ BBB なので、AAA で見ても変更されています。 このルールは PictureBox だけでなく、クラスなど、他のオブジェクトについても成り立ちます。 PictureBox の中身を退避(コピー)するには・・・どうすればいいんでしょうね。今、手元にVBがないのでわからないです。

matyap
質問者

お礼

ありがとうございました。自分がわかっていないことがよくわかりました。

その他の回答 (3)

回答No.4

#2 の訂正です。 Dim Pct(X) As Picturebox で、いきなり Pct(X).PaintPicutre としようとしてもダメでした。 Pct(X) の中身が空だから(実体がないから)です。 Set Pct(X) = New PictureBox なんてことしようとしてもできないみたいだし、 やはり、PictureBox をコントロール配列で用意しておくくらいしか方法がないような気がします。

matyap
質問者

お礼

ご親切に二度もありがとうございます。複数画面開くことで対応しました。

matyap
質問者

補足

三度も・・・でした。ありがとうございました。

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.3

ダメだった理由は、No1さんと同じです。 とにかく、Set xx = xx の物は全て、参照ですので、実体がコピーされる訳ではありません。 対処は、VB6まででしたら、PictureBoxを配列で 必要な数だけ用意しておき、表示内容をコピーするのが単純かと。 必要な数があらかじめ不明な場合は、Loadで配列内の個数を 後から増やせます。 No2さんの答えは、あってる気もしますが、pcx(X)に 別々のPictureBoxが設定されていないと やはり同じ結果になるように思います。 (なにも設定されていなければ、エラー)

matyap
質問者

お礼

ありがとうございます。複数の画面を開くことで対応しました。お世話になりました。

回答No.2

pct(X).PaintPicture form1.picture1.Picture 0, 0 で退避できるみたいです。

matyap
質問者

お礼

ありがとうございました

関連するQ&A

専門家に質問してみよう