1

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

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

否则,如果我不禁CanFocus用此保存按钮,则焦点将正确地从其上移开,TNumberBox并且其Value属性还可以。但是,当禁用CanFocus保存按钮时,焦点永远不会离开此控件,因此读取其Value属性会返回旧值。

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

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

笔记

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

4

2 回答 2

1

我发现 FireMonkey 需要<ENTER>或失去焦点来接受任何类型的编辑中的值。我认为您实际上不需要消除对回报的关注。

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

于 2015-06-19T00:02:05.690 回答
0

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

但是,如果要从那里使用TNumberBox.OnChangeTracking和阅读内容,这将不合适。Value

于 2015-06-18T23:23:01.443 回答