我有一个PageControl对象,在不同的标签页中有几个页面。
每个标签都包含许多对象,例如TEdits
和TComboBoxes
。
让我们说我在"标签A"在TEdit
中输入文本,然后将软件更改标签输入到"标签B"然后回到"标签A"。然后不再选择TEdit
,因此我需要再次选择它才能继续写作。
现在我的问题: 如何在更改选项卡之前保存/获取/存储所选对象,以便在返回上一个选项卡时可以返回到同一对象?
谢谢!
2018年2月15日 更新:
谢谢@ExDev!
Screen.ActiveControl
是我在寻找的地方!我这样解决了:
var
FocusObject : TWinControl;
begin
// Save selected object
FocusObject:= Screen.ActiveControl;
// Restore selected object
FocusObject.SetFocus;
end;
答案 0 :(得分:1)
您可以使用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
的值。