我有一个TPanel的主表单。我还有一个带有TButton的Form2,我从小就在TPanel中展示它。我的意思是main form的TPanel是Form2的父类。我使用以下步骤在MainForm OnCreate方法中创建form2
MainFormOnCreate()
Form2 := TForm2.create(nil)
Form2.Parent := Panel1;
Form2.show;但问题是,当我访问Form2上的按钮时,它什么也不做。例如,当我想要禁用Form2上的按钮时,我使用此方法
具有on click事件的主窗体上的button2
btn2OnClick();
Form2.btn.enabled := false;但它什么也做不了。一些朋友说,这是因为孩子到TPanel,它将不会得到任何消息。
所以给我一个解决方案。提前感谢
发布于 2013-07-20 13:42:23
主要问题是,您创建了两个TForm2实例。
您的.dpr文件如下所示
begin
Application.Initialize;
Application.CreateForm( TForm1, Form1 );
Application.CreateForm( TForm2, Form2 );
Application.Run;
end.在TForm1.OnCreate中创建一个TForm2实例并将该实例保存到全局变量Form2中之后,将创建另一个TForm2实例并将其存储到Form2中。
在TForm1.btn5.OnClick事件中,您将处理第二个创建的不可见TForm2。
解决方案
TForm2 TForm1中创建的TForm2实例存储在TForm1的私有类字段中
您的代码应如下所示
.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-20 20:54:50
试试这个
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Unit2;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
lForm: TForm;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if Assigned(lForm) then
TForm2(lForm).Button1.Enabled:= False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
lForm := TForm2.Create(self);
lForm.Parent := Panel1;
lForm.Align:= alClient;
lForm.show;
end;https://stackoverflow.com/questions/17758255
复制相似问题