从表单中,我创建并显示第二个表单.从第二种形式我想更新第一个窗体上的控件.但我违反了访问权限.我可以使用autocreate中的表单来处理它,但是当我使用create方法创建表单时,我得到了违规.
以下是一个例子.如果我在autocreate中使用表单11运行它,它可以工作(我更新第一个表单中的按钮标题).但是,如果在单元10中,如果我注释掉form11.show;,并且我取消注释创建和节目,然后从自动创建中取出Form11,则会出现访问冲突.
问题 - 当我使用create方法创建表单时,如何从显示的表单更新父表单.
Unit10
unit Unit10;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm10 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form10: TForm10;
implementation
uses Unit11;
{$R *.dfm}
procedure TForm10.Button1Click(Sender: TObject);
var
fForm : TForm11;
Begin
// fForm := Form11.Create(Self); //This and next line give me access violation
// fForm.Show; // with form11 out of autocreate
form11.show; //This works with form11 in the autocreate.
end;
end.
Run Code Online (Sandbox Code Playgroud)
Unit11
unit Unit11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm11 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form11: TForm11;
implementation
uses unit10;
{$R *.dfm}
procedure TForm11.Button1Click(Sender: TObject);
begin
form10.button1.caption := 'Changed';
end;
end.
Run Code Online (Sandbox Code Playgroud)
这是不正确的:
fForm := Form11.Create(Self)
Run Code Online (Sandbox Code Playgroud)
它应该是这样的:
fForm := TForm11.Create(Self)
Run Code Online (Sandbox Code Playgroud)
也就是说TForm11,不是Form11.要创建对象,必须通过类调用构造函数.
| 归档时间: |
|
| 查看次数: |
1559 次 |
| 最近记录: |