Delphi - 为什么此 Tab 键顺序无法正常工作?
Delphi - Why is this tab order not working properly?
我正在动态创建一些面板,其中有一个 TEdit
。我从下到上创建它们,因此我需要反转 TabOrder,它们是在以其他形式出现的框架内创建的。但是,当我尝试反转它时,我得到了错误的顺序(0-4-1-3-2),如果我不这样做,我得到了创建顺序(4-3-2-1-0),如预期的那样.
这是主窗体的代码:
type
TForm1 = class(TForm)
Frame: TFrame1;
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Frame := TFrame1.Create(Self);
Frame.Parent := Self;
end;
这里是框架和面板:
type
TFrame1 = class(TFrame)
public
constructor Create(aOwner: TComponent);
end;
TMyPanel = class(TPanel)
public
FEdit1: TEdit;
constructor Create(aOwner: Tcomponent; str: string);
end;
implementation
{$R *.dfm}
constructor TFrame1.Create(aOwner: TComponent);
var
Panel: TMyPanel;
I: integer;
begin
inherited Create(aOwner);
for I := 4 downto 0 do
begin
with TMyPanel.Create(Self, IntToStr(I)) do begin
Align := alTop;
Parent := Self;
Top := 10 * I;
TabOrder := I;
end;
end;
end;
constructor TMyPanel.Create(aOwner: Tcomponent; str: string);
begin
inherited Create(aOwner);
Caption := 'order ' + str;
FEdit1 := TEdit.Create(Self);
FEdit1.Align := alRight;
FEdit1.Parent := Self;
FEdit1.SetSubComponent(True);
end;
您不能将 Tab 键顺序设置为大于可以设置其 Tab 键顺序的控件的数量。
在 for 循环的第一次迭代中,您正在创建框架中父级的唯一控件(第一个面板),然后将其 Tab 键顺序设置为 4。Tab 键顺序实际上设置为 0。您需要更改算法。
我正在动态创建一些面板,其中有一个 TEdit
。我从下到上创建它们,因此我需要反转 TabOrder,它们是在以其他形式出现的框架内创建的。但是,当我尝试反转它时,我得到了错误的顺序(0-4-1-3-2),如果我不这样做,我得到了创建顺序(4-3-2-1-0),如预期的那样.
这是主窗体的代码:
type
TForm1 = class(TForm)
Frame: TFrame1;
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Frame := TFrame1.Create(Self);
Frame.Parent := Self;
end;
这里是框架和面板:
type
TFrame1 = class(TFrame)
public
constructor Create(aOwner: TComponent);
end;
TMyPanel = class(TPanel)
public
FEdit1: TEdit;
constructor Create(aOwner: Tcomponent; str: string);
end;
implementation
{$R *.dfm}
constructor TFrame1.Create(aOwner: TComponent);
var
Panel: TMyPanel;
I: integer;
begin
inherited Create(aOwner);
for I := 4 downto 0 do
begin
with TMyPanel.Create(Self, IntToStr(I)) do begin
Align := alTop;
Parent := Self;
Top := 10 * I;
TabOrder := I;
end;
end;
end;
constructor TMyPanel.Create(aOwner: Tcomponent; str: string);
begin
inherited Create(aOwner);
Caption := 'order ' + str;
FEdit1 := TEdit.Create(Self);
FEdit1.Align := alRight;
FEdit1.Parent := Self;
FEdit1.SetSubComponent(True);
end;
您不能将 Tab 键顺序设置为大于可以设置其 Tab 键顺序的控件的数量。
在 for 循环的第一次迭代中,您正在创建框架中父级的唯一控件(第一个面板),然后将其 Tab 键顺序设置为 4。Tab 键顺序实际上设置为 0。您需要更改算法。