開発環境はVB.netです。
Form1の複数プロシージャからForm2のテキストボックスに値を書き込むことをしています。Form1の先頭で
Public ChildForm As New Form2
と宣言して、ChildFormを操作しているのですが、Form2を閉じてしまうと
ChildFormの指していたオブジェクトは破棄されてしまうので、
ChildFormを利用できなくなります。
もう一度ChildFormを作成してForm2を操作しようとしましたが、
Form1の複数プロシージャから同じChildFormを利用するには
Public宣言でChildFormを作成する必要があると思うのですが
プロシージャ内ではPublic宣言はできません。
破棄したオブジェクトを再利用するとか、Form2を閉じるときにChildFormが指しているオブジェクトを保存しておいてもう一度利用するといった方法はあるのでしょうか?
よろしくお願いします。
むむむ。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200405/04050010.txt
↑と同じ方ですか??
>>案3:Form2 を閉じる処理で Form2 を破棄せず非表示にする
>で解決することにしました。
では問題が出てきたんですか?
>破棄したオブジェクトを再利用
できないと思いますけど…これができると仮定すると…破棄したのに
メモリのどこかに情報が残ってる(?)…ってヤバいんじゃないかと。
>Form2を閉じるときにChildFormが指しているオブジェクトを保存しておいてもう一度利用
これだけだと
>>案3:Form2 を閉じる処理で Form2 を破棄せず非表示にする
と意味は変わらないのではないかと思います。解決できない場合、
または都合が悪い場合はその理由を書いていただけますか?
以前に質問した者です。
現状問題はありません。ただ、仮にオブジェクトを破棄しなければならない(そんなことがあるかわかりませんが)事態が起こったときに他に方法はないものかと思い、再度投稿しました。
また、そもそも今のコードが良くないからこのような問題に当たるのかという疑問もあります。
何か御意見あれば御願いします。
『破棄』という意味をどう捉えてるのか分かりませんが…
ボクは『もう必要ない』とシステム(OS?)に宣言する事だと
思っています。
オブジェクトは当然ながらメモリ上に作られるわけですが、
『もう必要ない』と言ってしまった時点で、他のシステムが
今までオブジェクトが存在していたメモリを使っても良いわけ
ですよね?…で、もしその一度『破棄』したオブジェクトに
アクセスできたとして…壊れてるわけですが…使うんですか?(ーー;)
[.NET のメモリ管理]
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/dv_evtuv/html/etconmemorymanagement.asp
例えばゲームなんかで途中の状態を保持する場合、…セーブファイルを
作成しますよね?。必要な情報があるなら破棄する前に抜き出して
どこかに保存し、それを復帰できる仕組みを考えます。
必要なデータは破棄しない。
破棄するなら必要なデータは破棄しない部分に移動する。
…どこか難しいんですか?。…具体的に想像できないものはプログラム
できません。ここで聞けばそれなりの回答が得られる可能性もある
とは思いますが、答えるほうも困るんですよ…現実に結びつきにくい
質問は。具体的な機能が必要になってから質問してもらえませんか?(^^;)
まぁ、たまにあさっての方向に考えを巡らせるのもいい事だと思いますが、
レスは付きませんよ?…ってゆーか付けれないでしょう?…。
そうですね。
具体的な問題がないのに質問してもしょうがないですね。
すいません。
お付き合い頂いてありがとうございました。
ツイート | ![]() |