Delphi 访问父窗体中的子窗体继承的控件
我使用delphixe3。我有两种表格,TParentForm和TChildForm。TParentForm包含Button1,TChildForm从中继承 然后,当我在TParentForm中操作Button1时,在以下过程中TParentFrm.Button2ClickSender:ToObject,当我调用ChildForm时,它是否在ChildForm中的Button1实例上操作。显示并单击Button1Delphi 访问父窗体中的子窗体继承的控件,delphi,Delphi,我使用delphixe3。我有两种表格,TParentForm和TChildForm。TParentForm包含Button1,TChildForm从中继承 然后,当我在TParentForm中操作Button1时,在以下过程中TParentFrm.Button2ClickSender:ToObject,当我调用ChildForm时,它是否在ChildForm中的Button1实例上操作。显示并单击Button1 type TParentFrm = class(TForm) Butt
type
TParentFrm = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TChildForm = class(TParentFrm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
ParentFrm: TParentFrm;
implementation
{$R *.dfm}
procedure TParentFrm.Button2Click(Sender: TObject);
begin
Button1.Caption := '&Test'; // Is it operating on Childform's button1 when I
// create and show child form and then click
//"Button2".
end;
Test unit:
procedure TForm1.Button1Click(Sender: TObject);
begin
ChildForm.Show;
end;
简短答复:
您的代码将更改Button1控件的标题,该控件位于您单击的Button2所在的表单实例上
长答覆:
使用代码按钮1时。标题:='测试';您基本上指示compute查找名为Button1的组件,并将其标题属性更改为&Test。当计算机执行此搜索时,它总是在从中调用代码的表单实例中执行此搜索
因此,如果从父窗体上的按钮触发的OnClick事件调用代码,则会影响父窗体上的按钮1
如果从子窗体上的按钮触发的OnClick事件调用代码,则会影响子窗体上的Bu8tton1
是的,此时您的应用程序有两个名为Button1的按钮。一个在您的父窗体上,另一个在您的子窗体上
事实上,您还可以创建父窗体的另一个实例,单击该窗体上的按钮2将影响该窗体实例上的按钮1,而不是父窗体的原始实例
我希望我的解释是可以理解的。如果没有,请告诉我。简短回答:
您的代码将更改Button1控件的标题,该控件位于您单击的Button2所在的表单实例上
长答覆:
使用代码按钮1时。标题:='测试';您基本上指示compute查找名为Button1的组件,并将其标题属性更改为&Test。当计算机执行此搜索时,它总是在从中调用代码的表单实例中执行此搜索
因此,如果从父窗体上的按钮触发的OnClick事件调用代码,则会影响父窗体上的按钮1
如果从子窗体上的按钮触发的OnClick事件调用代码,则会影响子窗体上的Bu8tton1
是的,此时您的应用程序有两个名为Button1的按钮。一个在您的父窗体上,另一个在您的子窗体上
事实上,您还可以创建父窗体的另一个实例,单击该窗体上的按钮2将影响该窗体实例上的按钮1,而不是父窗体的原始实例
我希望我的解释是可以理解的。如果没有,请告诉我。t ChildForm从TParentForm继承。TParentForm的任何成员(不是严格私有的)都是从TChildForm实例继承和访问的。创建TChildForm实例时,它有一个从其父类继承的Button1实例,即TParentForm
不要将类型、类的定义和实例(简称:在运行时分配的数据)混为一谈
如果创建两个调用构造函数的TChildForm实例,那么button1和button2也有两个不同的实例。一个实例的Button2 OnClick处理程序将在与自身相同的TChildForm实例中操作button1实例
在我看来,在完全理解继承背后的一般机制之前,应该远离表单继承。t childform从TParentForm继承。TParentForm的任何成员(不是严格私有的)都是从TChildForm实例继承和访问的。创建TChildForm实例时,它有一个从其父类继承的Button1实例,即TParentForm
不要将类型、类的定义和实例(简称:在运行时分配的数据)混为一谈
如果创建两个调用构造函数的TChildForm实例,那么button1和button2也有两个不同的实例。一个实例的Button2 OnClick处理程序将在与自身相同的TChildForm实例中操作button1实例
在我看来,在完全理解继承背后的一般机制之前,您应该远离表单继承。您可能会混淆类型和实例。您有两种类型,并且可能有任意数量的这些类型的实例。你的问题毫无意义。该按钮在父类型中声明,并由子类型继承。没有子类型声明的按钮。如果要执行表单继承,则必须以不同的单位将它们分开,以便每个按钮都有相应的.dfmfile@DelphiCoder,我把它们合并在一起,以便读者更容易阅读。@DavidHeffernan,我已经更新了问题来澄清它。我不确定你是否真的理解类型和实例之间的区别。你知道你可以吗
n是否创建TParentForm和TChildForm的多个实例?我很确定这种理解对你来说是关键。你可能会对类型和实例感到困惑。您有两种类型,并且可能有任意数量的这些类型的实例。你的问题毫无意义。该按钮在父类型中声明,并由子类型继承。没有子类型声明的按钮。如果要执行表单继承,则必须以不同的单位将它们分开,以便每个按钮都有相应的.dfmfile@DelphiCoder,我把它们合并在一起,以便读者更容易阅读。@DavidHeffernan,我已经更新了问题来澄清它。我不确定你是否真的理解类型和实例之间的区别。您是否知道可以创建TParentForm和TChildForm的多个实例?我敢肯定,这种理解对你来说是关键。我会用稍微不同的措辞来回答这个冗长的问题。Button1.Caption,在本例中,在表单的方法中,类表示Self.Button1.Caption,其中Self是指向实例调用的隐藏参数:method=code+data。因此Self.Button1只是对象Self中的字段Button1;您可以在表单类的顶部看到它的声明。因此,没有什么必要去寻找;你只要取消一个指针的引用,我会用稍微不同的措辞来回答这个长答案。Button1.Caption,在本例中,在表单的方法中,类表示Self.Button1.Caption,其中Self是指向实例调用的隐藏参数:method=code+data。因此Self.Button1只是对象Self中的字段Button1;您可以在表单类的顶部看到它的声明。因此,没有什么必要去寻找;您只需取消对指针的引用。