gpt4 book ai didi

Delphi:按下保存按钮后返回焦点

转载 作者:行者123 更新时间:2023-12-01 23:35:01 24 4
gpt4 key购买 nike

我有一个带有保存按钮的表单(模态)。请记住,按下此按钮后不会关闭表单,并且在保存数据后会被禁用。

我想做的是在按下保存按钮后将焦点返回到使用的最新对象组件(编辑、vst、组合框等)。

最佳答案

您可以使用专门的按钮,在接收焦点时保存先前获得焦点的控件:

type
TSaveButton = class(TButton)
private
FPrevWinControl: TWinControl;
protected
procedure Click; override;
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
end;

procedure TSaveButton.WMSetFocus(var Message: TWMSetFocus);
begin
FPrevWinControl := FindControl(Message.FocusedWnd);
inherited;
end;

procedure TSaveButton.Click;
begin
inherited;
if Assigned(FPrevWinControl) then
FPrevWinControl.SetFocus;
end;

然而,这需要对某些具有多个窗口的控件进行一些专门处理。例如。组合框,如果编辑窗口获得焦点,FindControl 将找不到组合框,您需要传递编辑的父级。


还可以在表单级别处理它,例如通过覆盖 SetFocusedControl:

type
TForm1 = class(TForm)
...
procedure ButtonSaveClick(Sender: TObject);
private
FPrevWinControl: TWinControl;
public
function SetFocusedControl(Control: TWinControl): Boolean; override;
...

function TForm1.SetFocusedControl(Control: TWinControl): Boolean;
begin
if Control = ButtonSave then
FPrevWinControl := ActiveControl;
Result := inherited SetFocusedControl(Control);
end;

procedure TForm1.ButtonSaveClick(Sender: TObject);
begin
// save ...
if Assigned(FPrevWinControl) then
FPrevWinControl.SetFocus;
end;

关于Delphi:按下保存按钮后返回焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29716765/

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