【发布时间】:2021-05-21 07:56:04
【问题描述】:
我使用 Delphi 编写代码。
当我按下按钮时,它会创建一个新的 MDI 子窗体。
所以,程序有多个 MDI 子窗体,我想访问 MainForm 中每个子窗体的组件(例如,计时器)。
MainForm 是 fsMDIForm,ChildForm 是 fsMDIChild。
这是我尝试过的代码。但它不起作用,因为 TChildForm 和 TForm 不兼容。
procedure TMainForm.Start1Click(Sender: TObject);
var
i : Integer;
begin
for i := MainForm.MDIChildCount-1 to 0 do
begin
ChildForm := MainForm.MDIChildren[i]; //Incompatible types -> Can't Run
ChildForm.Timer1.Enabled := True;
end;
end;
unit MDIChildForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ToolWin, ActnMan, ActnCtrls, ComCtrls, Buttons,
ExtCtrls;
type
TChildForm = class(TForm)
ToolBar1: TToolBar;
ListView1: TListView;
ToolButton1: TToolButton;
Splitter1: TSplitter;
Memo1: TMemo;
ToolButton2: TToolButton;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ChildForm: TChildForm;
value1: Integer = 1;
implementation
{$R *.dfm}
procedure TChildForm.FormCreate(Sender: TObject);
begin
{
itm := ListView1.Items.Add;
itm.Caption := 'item ' + IntToStr(value1);
itm.SubItems.Add('subItem1 ' + IntToStr(value1));
itm.SubItems.Add('subItem2 ' + IntToStr(value1));
}
Timer1.Enabled := False;
{
ChildForm.Caption := 'ChildForm' + IntToStr(value1);
Inc(value1);
}
end;
procedure TChildForm.ToolButton1Click(Sender: TObject);
begin
ToolButton1.Show;
value1 := value1 + 10;
end;
procedure TChildForm.ToolButton2Click(Sender: TObject);
begin
//ListView1.Items.Item[0] := 'Index';
end;
procedure TChildForm.Timer1Timer(Sender: TObject);
var
itm : TListItem;
i : Integer;
begin
for i:= value1 to value1+10 do
begin
itm := ListView1.Items.Add;
itm.Caption := 'item ' + IntToStr(i);
end;
value1 := i;
end;
end.
如何以子形式访问组件?
【问题讨论】:
-
ChildForm是如何声明的?是MainForm一个fsMDIForm。您的问题缺少所需的详细信息。请编辑并提供minimal reproducible example -
我添加了有关我的代码的更多信息。对不起,我必须上传,所以我上传了关于 ChildForm 的完整代码。请查看我的问题。