Delphi - 为什么这个 Tab 键顺序不能正常工作?

标签 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;

最佳答案

您不能将 Tab 键顺序设置为大于可设置 Tab 键顺序的控件数量的数字。

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

关于Delphi - 为什么这个 Tab 键顺序不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44661194/

相关文章:

delphi - delphi 的简单虚拟文件系统 - 必须免费!

delphi - 访问 Intraweb 中的 UserSession 时的访问冲突

c - 如何在C++Builder项目的Delphi单元中使用Crtl? (或链接到 C++Builder C 运行时库)

android - 正确进行线程化 FTP 下载 (Indy/Android)

delphi - 为什么 Tstringlist.LoadFromfile 无法加载合理大小的文件?

Delphi Berlin 10.1 除零异常缺失

delphi - 为什么通过 dbExpress 重新连接到 Oracle 数据库会导致访问冲突?

delphi - 我如何从内存中销毁(释放)表单?

delphi - 使用扩展参数调用 Delphi 函数时出现 C++ 错误

Delphi - 如何确保正确可靠地终止线程而不丢失内存