首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问TPanel子窗体控件?

如何访问TPanel子窗体控件?
EN

Stack Overflow用户
提问于 2013-07-20 11:08:11
回答 2查看 1.7K关注 0票数 0

我有一个TPanel的主表单。我还有一个带有TButtonForm2,我从小就在TPanel中展示它。我的意思是main form的TPanelForm2的父类。我使用以下步骤在MainForm OnCreate方法中创建form2

代码语言:javascript
复制
MainFormOnCreate()

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

但问题是,当我访问Form2上的按钮时,它什么也不做。例如,当我想要禁用Form2上的按钮时,我使用此方法

具有on click事件的主窗体上的button2

代码语言:javascript
复制
btn2OnClick();
Form2.btn.enabled := false;

但它什么也做不了。一些朋友说,这是因为孩子到TPanel,它将不会得到任何消息。

所以给我一个解决方案。提前感谢

EN

回答 2

Stack Overflow用户

发布于 2013-07-20 13:42:23

主要问题是,您创建了两个TForm2实例。

您的.dpr文件如下所示

代码语言:javascript
复制
begin
  Application.Initialize;
  Application.CreateForm( TForm1, Form1 );
  Application.CreateForm( TForm2, Form2 );
  Application.Run;
end.

TForm1.OnCreate中创建一个TForm2实例并将该实例保存到全局变量Form2中之后,将创建另一个TForm2实例并将其存储到Form2中。

TForm1.btn5.OnClick事件中,您将处理第二个创建的不可见TForm2

解决方案

  • 转至项目/选项->公式并从AutoCreate列表中删除TForm2
  • 将在TForm1中创建的TForm2实例存储在TForm1

的私有类字段中

您的代码应如下所示

.dpr文件:

代码语言:javascript
复制
begin
  Application.Initialize;
  Application.CreateForm( TForm1, Form1 );
  Application.Run;
end.

Unit1.pas

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2013-07-20 20:54:50

试试这个

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17758255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档