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

时间:2015-06-18 22:39:07

标签: delphi focus firemonkey delphi-xe8

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

现在用于保存更改的按钮,我故意禁用了其CanFocus属性以及我应用中的所有按钮。这是因为我使用的风格(Jet),一个聚焦按钮看起来很可怕(深灰色背景上的黑色文字)。更不用说,在我的情况下,在移动平台上,焦点实际上是无用的。

否则,如果我未在此保存按钮上停用CanFocus,则焦点将从TNumberBox正确取消,其Value属性正常。但是,在保存按钮上禁用CanFocus时,焦点永远不会从此控件中删除,因此读取其Value属性将返回旧值。

如何确保Value属性返回正确的新值而不将保存按钮更改为CanFocus

启用KillFocusOnReturn没有用,因为用户必须知道他们需要按"返回"或"输入"这不是一种选择。

注意

如果您要使用TNumberBox.OnChangeTracking事件,此问题也会持续存在。如果您甚至无法阅读新值,我也不确定此事件的用途。

2 个答案:

答案 0 :(得分:1)

我发现FireMonkey需要<ENTER>或失去焦点才能在任何类型的编辑中接受值。我认为你真的不需要把重点放在回归上。

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

答案 1 :(得分:0)

我刚刚发现了一个肮脏的解决办法。启用按钮的CanFocus属性,然后在按钮单击时,首先发生的事情应该是将焦点设置回TNumberBox控件。这样既可以将焦点从控制中取出(从而刷新值),同时也可以将焦点从按钮上移开(从而避免可怕的外观)。

如果要使用TNumberBox.OnChangeTracking并从那里阅读Value,这将不合适。