如何在设计时将 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 = 0
和MaxValue = 0
,则没有限制。
这是有道理的,也是 API 中相当普遍的约定。
但是,为了绝对确定,您应该始终查阅文档。在这种情况下,MaxValue
的文档是这样说的:
Embarcadero Technologies does not currently have any additional information.
那是一个错误。文档非常重要。
我最初的猜测是 MinValue = 0
和 MaxValue = 0
表示“无限制”,任何其他对表示存在限制,由这些属性指定的界限给出。所以如果你设置其中一个,你必须同时设置。
在你的例子中,你设置了 MinValue
但没有设置 MaxValue
。由于您不需要上限,因此可以通过将 MaxValue
设置为 属性 的最大可能值来实现。 (因为这个 属性 是 Extended
类型,取决于你的应用程序是 32 位还是 64 位。但在实践中,我打赌像 1E20
这样的东西会很好地工作你。)
现在,我的猜测是否正确?
有点。
查看TNumberBox
源代码,我看到没有限制iff MinValue = MaxValue
(不是我猜想的MinValue = 0
和MaxValue = 0
).
IMMNSHO,这是一个奇怪而糟糕的设计选择。我的意思是,如果我将 MinValue
和 MaxValue
设置为 20
(在运行时,由于程序的状态),我希望该值固定为 20
。但不是!现在它可以是任何值。
IMMNSHO,这是一个错误。
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 = 0
和MaxValue = 0
,则没有限制。
这是有道理的,也是 API 中相当普遍的约定。
但是,为了绝对确定,您应该始终查阅文档。在这种情况下,MaxValue
的文档是这样说的:
Embarcadero Technologies does not currently have any additional information.
那是一个错误。文档非常重要。
我最初的猜测是 MinValue = 0
和 MaxValue = 0
表示“无限制”,任何其他对表示存在限制,由这些属性指定的界限给出。所以如果你设置其中一个,你必须同时设置。
在你的例子中,你设置了 MinValue
但没有设置 MaxValue
。由于您不需要上限,因此可以通过将 MaxValue
设置为 属性 的最大可能值来实现。 (因为这个 属性 是 Extended
类型,取决于你的应用程序是 32 位还是 64 位。但在实践中,我打赌像 1E20
这样的东西会很好地工作你。)
现在,我的猜测是否正确?
有点。
查看TNumberBox
源代码,我看到没有限制iff MinValue = MaxValue
(不是我猜想的MinValue = 0
和MaxValue = 0
).
IMMNSHO,这是一个奇怪而糟糕的设计选择。我的意思是,如果我将 MinValue
和 MaxValue
设置为 20
(在运行时,由于程序的状态),我希望该值固定为 20
。但不是!现在它可以是任何值。
IMMNSHO,这是一个错误。