Firemonkey TNumberBox - 新值在失去焦点之前不可用

Firemonkey TNumberBox - new value not available until losing focus

使用 TNumberBox 控件(至少在 Windows 中,可能还有其他平台),当我输入一个新值,然后按下按钮 (TButton) 以保存更改,在读取 TNumberBox.Value 属性 后,它返回进行编辑之前的原始值。事实证明,只有在控件失去焦点之后才能访问此值。

现在用于保存更改的按钮,我故意禁用了它 CanFocus 属性,以及我应用程序中的所有按钮。这是因为在我使用的样式 (Jet) 中,聚焦按钮看起来很糟糕(深灰色背景上的黑色文本)。更不用说,在移动平台上,焦点对我来说几乎没有用。

否则,如果我不禁用此保存按钮上的 CanFocus,焦点就会正确地从 TNumberBox 上移开,它的 Value 属性 就可以了.但是,当在保存按钮上禁用 CanFocus 时,焦点永远不会离开该控件,因此读取它的 Value 属性 returns 旧值。

如何在不将保存按钮更改为 CanFocus 的情况下确保 Value 属性 returns 正确的新值?

启用 KillFocusOnReturn 没有用,因为用户必须知道他们需要按 "Return" 或 "Enter",这不是一个选项。

注意

如果您使用 TNumberBox.OnChangeTracking 事件,这个问题也会持续存在。如果您甚至无法读取新值,我不确定此事件有何用处。

我刚刚至少发现了一个肮脏的解决方法。启用按钮的 CanFocus 属性,然后在单击按钮时,发生的第一件事应该是将焦点设置回 TNumberBox 控件。这将允许焦点从控件上移开(从而刷新值),同时也将焦点从按钮上移开(从而避免糟糕的外观)。

但是,如果要利用 TNumberBox.OnChangeTracking 并从中读取 Value,则此方法不适用。

我发现 FireMonkey 需要 <ENTER> 或失去焦点才能在任何类型的编辑中接受值。我认为您实际上不需要取消对 return.

的关注

真正的解决方案似乎是编辑样式以更改获得焦点的按钮的显示。我不喜欢某些控件的显示,或者我想添加图形等,所以我只是进入我项目中的样式并进行更改以获得我想要的。