gpt4 book ai didi

delphi - 如何在 Delphi 中获取焦点/选定的对象?

转载 作者:行者123 更新时间:2023-12-05 05:17:47 24 4
gpt4 key购买 nike

我有一个 PageControl 对象,其中多个页面位于不同的选项卡中。每个选项卡包含许多对象,例如 TEditsTComboBoxes。假设我在“选项卡 A”中,在 TEdit 中输入文本,然后软件将选项卡更改为“选项卡 B”,然后返回到“选项卡 A”。然后TEdit不再被选中,所以我需要再次选择它才能继续编写。

现在回答我的问题:如何在更改选项卡之前保存/获取/存储所选对象,以便在返回上一个选项卡时返回到同一对象?

谢谢!


2018-02-15更新:

谢谢@ExDev!

Screen.ActiveControl 正是我要找的东西!我是这样解决的:

var 
FocusObject : TWinControl;
begin
// Save selected object
FocusObject:= Screen.ActiveControl;

// Restore selected object
FocusObject.SetFocus;
end;

最佳答案

您可以使用 TPageControl.OnChanging在更改事件选项卡和 TPageControl.OnChange 之前存储焦点控件的事件事件以恢复其聚焦状态。

示例:

TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
procedure PageControl1Changing(Sender: TObject; var AllowChange: Boolean);
procedure FormCreate(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
private
FActiveControls : array of TWinControl;
end;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(FActiveControls, PageControl1.PageCount);
end;

procedure TForm1.PageControl1Change(Sender: TObject);
begin
if(FActiveControls[TPageControl(Sender).ActivePageIndex] <> nil)
then FActiveControls[TPageControl(Sender).ActivePageIndex].SetFocus();
end;

procedure TForm1.PageControl1Changing(Sender: TObject;
var AllowChange: Boolean);
begin
FActiveControls[TPageControl(Sender).ActivePageIndex] := Screen.ActiveControl;
end;

注意:

如果您在代码中更改事件页面,例如通过设置 TPageControl.ActivePage 的值,则不会调用这两个事件。

关于delphi - 如何在 Delphi 中获取焦点/选定的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com