我在控制方面遇到以下问题TDateTimePicker
:
(1) 当表单出现时,它会自动聚焦。这是我对表单的第一次控制,但一切都需要在启动时分散注意力。我尝试了以下方法:
procedure TfrmMain.FormShow(Sender: TObject);
begin
// ...
// Defocus everything
Self.ActiveControl := nil; // Does not work
end;
(2) 此外,还有一个TSpeedButton
可以使该控件散焦的按钮,但按下它并不会从 中移除焦点TDateTimePicker
。(其他控件(例如常规控件)确实TButton
会删除它。)
您可以将其
TabStop
属性设置为 false 以防止其获得初始焦点。请注意,这也会阻止用户使用该TAB键将焦点转移到
TDateTimePicker
。TSpeedButton
按 a不会将焦点从 a 转移的原因TDateTimePicker
是,它TSpeedButton
不是可聚焦的控件。这是一个非常奇怪的要求。我的直觉是你的设计不是最理想的。您不应该违背操作系统及其约定——您应该尝试遵守用户在平台上期望的规范。
这是预期的,因为它
TSpeedButton
是图形控件,而不是窗口控件。因此,速度按钮不是窗口(如常规按钮、编辑框、单选按钮、复选框、组合框、列表框、列表视图等)。特别是,这意味着用户无法使用键盘(Tab)移动到您的按钮,因此速度按钮使您的 GUI 更难以访问且使用起来不太方便。
由于这个原因,我从不使用速度按钮。
但如果你绝对坚持,你就能让一切从一开始就变得散焦。
您只需要添加一个
OnActivate
处理程序,将表单设置ActiveControl
为nil
: