提问人:gene b. 提问时间:11/15/2023 最后编辑:AmigoJackgene b. 更新时间:11/15/2023 访问量:103
Delphi:散焦 TDateTimePicker 控件
Delphi: de-focus TDateTimePicker control
问:
我的控件存在以下问题:TDateTimePicker
当表单出现时,它会自动聚焦。这是我对表单的第一个控制,但一切都需要将重点放在启动上。我尝试了以下方法:
procedure TfrmMain.FormShow(Sender: TObject); begin // ... // Defocus everything Self.ActiveControl := nil; // Does not work end;
此外,还有一个 which 应该使此控件散焦,但按下它不会从 .(其他控件(如常规控件)会将其删除。
TSpeedButton
TDateTimePicker
TButton
答:
可以将其 TabStop
属性设置为 false,以防止它获得初始焦点。
请注意,这也将阻止用户使用该键将焦点转移到 以及。TABTDateTimePicker
按 a 不会将焦点从 的 上移开的原因是它不是可聚焦的控件。TSpeedButton
TDateTimePicker
TSpeedButton
评论
当表单出现时,它会自动聚焦。这是我对表单的第一个控制,但一切都需要将重点放在启动上。
这是一个非常奇怪的要求。我的直觉是你的设计是次优的。你不应该与操作系统及其惯例作斗争——你应该努力遵守用户在平台上期望的规范。
此外,还有一个 which 应该使此控件散焦,但按下它不会从 .
TSpeedButton
TDateTimePicker
这是意料之中的,因为这是一个图形控件,而不是窗口控件。因此,速度按钮不是窗口(就像常规按钮、编辑框、单选按钮、复选框、组合框、列表框、列表视图等一样)。TSpeedButton
特别是,这意味着用户无法使用键盘 (Tab) 移动到您的按钮,因此速度按钮会使您的 GUI 更难访问且使用起来不太方便。
出于这个原因,我从不使用速度按钮。
一切都需要将注意力转移到启动上
但如果你绝对坚持,你可以从一开始就让一切散焦。
您只需要添加一个处理程序,将表单设置为:OnActivate
ActiveControl
nil
procedure TForm1.FormActivate(Sender: TObject);
begin
ActiveControl := nil
end;
评论
ActiveControl := nil
OnActivate
OnShow
评论
TDateTimePicker
TSpeedButton
TSpeedButton
是一个图形控件,它不能有输入焦点。 并且是窗口控件,可以具有输入焦点。TButton
BitBtn
TDateTimePicker
TSpeedButton
DTM_GETDATETIMEPICKERINFO
设置编辑控件ES_NOHIDESEL
应该是可能的,但它不起作用,因为它不是永久控件(是我期望在任何编辑控件上使用的功能)。TEdit.HideSelection