Delphi - 为什么此标签顺序无法正常工作?

时间:2017-06-20 19:08:11

标签: delphi delphi-10.1-berlin

我创建了一些动态内置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;

1 个答案:

答案 0 :(得分:4)

您无法将标签顺序设置为大于可设置标签顺序的控件数量的数字。

在for循环的第一次迭代中,您将创建唯一的控件(第一个面板),该控件在框架中是父级,然后将其Tab键顺序设置为4. Tab键顺序实际上设置为0。您需要更改算法。