【问题标题】:Delphi - Why is this tab order not working properly?Delphi - 为什么这个标签顺序不能正常工作?
【发布时间】:2017-06-20 19:08:11
【问题描述】:

我正在动态创建几个面板,其中包含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;

【问题讨论】:

    标签: delphi delphi-10.1-berlin


    【解决方案1】:

    您不能将跳位顺序设置为大于可以设置跳位顺序的控件的计数。

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

    【讨论】:

    • 确实,我建议 A) 创建所有控件,然后 B) 在创建完所有控件后更新 Tab 键顺序。
    • @JerryDodge 是的,刚刚将面板添加到列表中,然后更改了 taborder 并且它起作用了。 TY Akyuz
    • @Kiogara - 不客气。您不需要单独的列表/数组,您可以将制表符顺序设置为 0(或 -1,如果已经有 2 个控件,则为 2 - 任何会产生 insert 效果的东西)。
    猜你喜欢
    • 1970-01-01
    • 2020-09-19
    • 2016-01-15
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    相关资源
    最近更新 更多