我在单独的选项卡中有一个带有几页的pagecontrol对象。每个选项卡都包含许多对象,例如TEdits
和TComboBoxes
。假设我在TEdit
中输入文本的" TAB A"中,然后"软件"将选项卡更改为" TAB B",然后返回" TAB 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
的值。