如何在设计时将 TNumberBox 的值预设为特定的整数值?

How to preset the Value of a TNumberBox at DesignTime to a specific Integer value?

In a 32-bit VCL Application in Windows 10 in Delphi 11 Alexandria, 我尝试使用 TNumberBox 控件:

object nbRowheight: TNumberBox
  Left = 20
  Top = 225
  Width = 77
  Height = 23
  Hint = 'Set the Row height.'
  Anchors = []
  MinValue = 18.000000000000000000
  TabOrder = 8
  SpinButtonOptions.ButtonWidth = 20
  SpinButtonOptions.Placement = nbspInline
end

在设计时,我尝试在ObjectInspector中将其预设为21的值。但是只要我在 ObjectInspector 的 Value 字段中输入 21 然后按下 Enter 键,Value 就会切换回 0!

那么如何在设计时将 TNumberBox 的值预设为特定的整数值?

更新:显然,问题是由 MaxValue 保留在默认值 0 引起的:如果我将 MaxValue 设置为例如32 在 ObjectInspector 中,然后我可以毫无问题地在 ObjectInspector 中输入 Value 21。但是默认的 MaxValue 为 0 是否意味着它是不确定的(即它可以是任何值)?

嗯,如果MinValue = 0MaxValue = 0,则没有限制。

这是有道理的,也是 API 中相当普遍的约定。

但是,为了绝对确定,您应该始终查阅文档。在这种情况下,MaxValue 的文档是这样说的:

Embarcadero Technologies does not currently have any additional information.

那是一个错误。文档非常重要。

我最初的猜测是 MinValue = 0MaxValue = 0 表示“无限制”,任何其他对表示存在限制,由这些属性指定的界限给出。所以如果你设置其中一个,你必须同时设置。

在你的例子中,你设置了 MinValue 但没有设置 MaxValue。由于您不需要上限,因此可以通过将 MaxValue 设置为 属性 的最大可能值来实现。 (因为这个 属性 是 Extended 类型,取决于你的应用程序是 32 位还是 64 位。但在实践中,我打赌像 1E20 这样的东西会很好地工作你。)

现在,我的猜测是否正确?

有点。

查看TNumberBox源代码,我看到没有限制iff MinValue = MaxValue(不是我猜想的MinValue = 0MaxValue = 0 ).

IMMNSHO,这是一个奇怪而糟糕的设计选择。我的意思是,如果我将 MinValueMaxValue 设置为 20(在运行时,由于程序的状态),我希望该值固定为 20。但不是!现在它可以是任何值。

IMMNSHO,这是一个错误。