1
我有一個保存按鈕的窗體(模式)。請記住,此按鈕在按下後沒有關閉表格,並且在保存數據後變爲禁用狀態。德爾福:按下保存按鈕後返回焦點
我想要做的是將焦點返回到保存按鈕被按下後使用的最新對象組件(編輯,vst,組合框等)。
我有一個保存按鈕的窗體(模式)。請記住,此按鈕在按下後沒有關閉表格,並且在保存數據後變爲禁用狀態。德爾福:按下保存按鈕後返回焦點
我想要做的是將焦點返回到保存按鈕被按下後使用的最新對象組件(編輯,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;
第二個變體看起來更好。謝謝你的回答Sertac Akyuz – REALSOFO
http://stackoverflow.com/questions/15316831/how-to-remove-focus-rectangle-from-一鍵控制 –