如何在Delphi中获取聚焦/选择的对象



我在单独的选项卡中有一个带有几页的pagecontrol对象。每个选项卡都包含许多对象,例如TEditsTComboBoxes。假设我在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的值。

,则不会调用两个事件。

最新更新