1

在 Delphi 11 Alexandria 的 Windows 10 中的 32 位 VCL 应用程序中,我尝试使用一个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引起的:如果我在ObjectInspector中设置MaxValue为例如32,那么我可以Value在ObjectInspector中输入21而没有问题。但是默认值MaxValue0 是否意味着它是不确定的(即它可以是任何值)?

4

1 回答 1

2

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

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

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

Embarcadero Technologies 目前没有任何其他信息。

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

我最初的猜测是,MinValue = 0并且MaxValue = 0意味着“没有限制”,任何其他对都意味着存在限制,由这些属性指定的界限给出。因此,如果您设置其中之一,则必须同时设置两者。

在您的情况下,您设置MinValue但未能设置MaxValue。由于您不需要上限,因此可以通过设置MaxValue属性的最大可能值来实现。(由于这个属性是 type Extended,取决于你的应用是 32 位还是 64 位。但在实践中,我敢打赌类似的东西1E20对你很有效。)

现在,我的猜测正确吗?

有点儿。

查看TNumberBox源代码,我发现没有限制iff MinValue = MaxValue(不是MinValue = 0MaxValue = 0我猜的那样)。

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

恕我直言,这是一个错误。

于 2022-02-14T08:31:21.577 回答