1

誰かがこれで私を助けることができます:

私はフォーム1とフォーム2を持っています

in form1 1 :use form2.
in form1 put a button with code Form2.Showmodal;
form2 is made invisible
form2 has one button:
  • form2.close = 機能しますが、フォームを非表示にするだけで閉じません。-form2.free - アクセス違反またはクローズして form1 がフリーズします (それを強制終了するための taskmngr)
  • Form2. リリース - アクセス違反またはクローズ..フォーム1の開くボタンをクリックしてフォームを再度開くと、アクセス違反が発生します..
  • Form2.close + onClose アクション :=cafree; - アクセス違反..
  • Form2.closemodal - 効果はありません..

form1 からモーダルとして表示されている form2 を破棄して再利用するにはどうすればよいですか?

たくさんありがとう..それは単純なものでなければなりません。私は見落としています。

s

4

3 に答える 3

2

まず、フォーム 2 を自動作成から削除します。

Project > Options > Forms 
Remove Form 2 from "Auto-create forms"

これにより、このフォームが自動的に作成されないようになります。

そのインスタンスを作成するときは、その名前 ( など) で参照しないでくださいForm2。代わりに、一時変数を作成します。モーダル状態で表示したい場合は、次のようにします。

procedure Button1Click(Sender: TObject);
var
  F: TForm2;
begin
  F:= TForm2.Create(nil);
  try
    F.ShowModal;
  finally
    F.Free;
  end;
end;

など、フォームに付けた名前でフォームを参照しないでくださいForm2。上記のように ( を使用して) 別の変数としてインスタンス化する場合はF、すべての呼び出しがこの変数を介して行われるようにしてください。実際、自動作成されたフォームからこのフォームを削除する限り、このフォームへの宣言を完全に削除できます。

var
  Form2: TForm2;

非モーダル状態で表示したい場合は、メイン フォームに引き続きアクセスできるようにするには、まったく異なる方法で行う必要があります。それが必要かどうか教えてください。答えを調整します。

于 2013-01-03T04:07:09.060 に答える
0
//this script for showing Form through Button with position 
//change position by changing left or top by changing 120 and 300
//in Delphi 10.3 and above 
// add form2 unit name in main unit in implementation as uses

//例 //実装 //main を使用。手順 Button1Click(送信者: TObject); var F: TForm2; // 呼び出しまたは表示に必要なフォーム begin F:= TForm2.Create(nil); F.Left :=left+120; を試してください。//Desired Formの左位置 F.Top :=top+300; //目的のフォームの先頭位置 F.ShowModal; 最後にF.Free; 終わり; 終わり;

于 2020-07-20T10:26:16.203 に答える