アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++Builder5.0の質問です。
フォーム(Form1)に複数のボタンを配置し、メニュー画面としました。
ボタンを押すと他の画面(Form2~5)に移れるようにしました。
ボタンには

TForm2 *Form2 = new TForm2(this);
Form2 -> Show();
Close();

Form2からForm5まであります。
と記述し、

Form2から5には「戻る」ボタンを設け、Form1(メニュー画面)に
戻れるようにしました。

Form2~5の「戻る」ボタンには
TForm1 *Form1 = new TForm1(this);
Form1 -> Show();
Close();
と記述しました。

また、全てのフォームのFormCloseイベントには自分のフォームを破棄するために
delete Form2;
等と記述しました。

この状態でメニュー画面からForm2~5を開いたり閉じたりすることを
繰り返すと、不定期的に動作が固まってしまいます。
この原因はなんでしょうか。
Ver.はBCB5.0(Pro.)です。

御回答をよろしくお願いします。

A 回答 (2件)

一般的にC++Builderでフォームを新規作成すると


自動的にインスタンスは生成される仕様になっているのですが、
その対策はされているのでしょうか?
#プロジェクト-オプションのフォームタブの自動生成の対象

Builderではフォームはnewせずにそのままコンパイラに生成させて
FormX->Show();してFormX->Close();するのが自然だと思います。
ただしForm1だけはClose();するとプログラム閉じてしまうんで、
Form1->Visible = false;
するのが適当だと思います。
Close()はForm1以外はインスタンスは残ったままです。

ちなみにデストラクトも自動でやってくれるはずです。

メモリの関係でどうしても自分でインスタンスを生成したい場合は
ヘルプでTFormを検索して関連項目を当たってください。
ほぼ必要な項目はこの中にあるはずです。

この回答への補足

御返事有り難うございました。

自動生成に対象にはForm1だけを指定しています。
「コンパイラに生成させて」とは、自動生成の対象に
全てのフォームを指定するという意味でしょうか。
その場合、メモリが大量に消費されてしまうという
問題は発生しないのでしょうか。
よろしければ御回答をお願いします。

補足日時:2001/03/12 01:03
    • good
    • 0

そんなにメモリは食わないと思います、としか言えないです。


少なくとも10個、20個ぐらいでは実用に耐えうる程度のメモリ
しか食わないと思います。

で、補足説明と自分の若干の質問の勘違いとを修正して考えますと、
若干の疑問と問題点がうかびました。

まず、Form1だけを自動生成している以上、Form1をClose();
したらアプリが終わってしまう気がするんですが(^^;;
ですのでForm1->Visible = false;が適当かと。
あとForm1もdeleteしてないかどうかご確認願います。
(自動生成しているのでしちゃまずいです)

次にForm1を自動生成していることから、Form1のインスタンスは
既にできているので、Form1->Show();かForm1->Visible = true;
でいいかと。

どうせなら全部自動生成しない方がいいかもしれないですね。

なんか回答というかアドバイスにしかならなくて申し訳ないです。
    • good
    • 1
この回答へのお礼

御返事頂きましてありがとうございました。

間違いがありましたので訂正します。
Form2~5を表示させた後、Form1のClose()は行ってはおらず、Form1->Hide();としていました。
また、Form2からForm1へ戻る時は、Form1->Show();
としていました。

すべてのフォームを自動生成する方法で行いたいと
思います。

お礼日時:2001/03/12 10:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!