0

I have a main form with TPanel. I have also a Form2 with a TButton which I show in TPanel as a child. I mean TPanel of main form is parent of Form2. I use these steps to create the form2 in MainForm OnCreate method

MainFormOnCreate()

Form2 := TForm2.create(nil)
Form2.Parent := Panel1;
Form2.show;

But the problem is that when I access the button on Form2 it does nothing. For example, when I want to disable the button on Form2 I use this method

A button2 on main form with on click event

btn2OnClick();
Form2.btn.enabled := false;

But it does nothing. Some friends says it's because of child to TPanel it will get no message.

So give me a solution. Thanks in advance

4

2 に答える 2

2

主な問題は、 の 2 つのインスタンスを作成することですTForm2

ファイル.dprは次のようになります

begin
  Application.Initialize;
  Application.CreateForm( TForm1, Form1 );
  Application.CreateForm( TForm2, Form2 );
  Application.Run;
end.

で のインスタンスを作成し、このインスタンスをグローバル変数 に保存するとTForm2、の別のインスタンスが作成され、 に保存されます。TForm1.OnCreateForm2TForm2Form2

2 番目に作成された、TForm1.btn5.OnClick目に見えないTForm2.


解決

  • Project / Options -> Formulaに移動し、 AutoCreate ListTForm2から削除します
  • のプライベート クラス フィールドのTForm2内部に作成されたのインスタンスを格納します。TForm1TForm1

コードは次のようになります

.dprファイル:

begin
  Application.Initialize;
  Application.CreateForm( TForm1, Form1 );
  Application.Run;
end.

Unit1.pas

TForm1 = class( TForm )
...
procedure FormCreate( Sender : TObject );
procedure btn2Click( Sender : TObject );
private
  FForm2 : TForm2;
  ...
end;

procedure TForm1.FormCreate( Sender : TObject );
begin
  FForm2 := TForm2.Create( Self );
  FForm2.Parent := Panel1;
  FForm2.Show;
end;

procedure TForm1.btn2Click( Sender : TObject );
begin
  FForm2.btn.Enabled := True;
end;
于 2013-07-20T05:42:23.403 に答える