MaxLength 属性 在代码中设置文本时无效
MaxLength property has no effect when setting text in code
我注意到当我设置 Edit 或 DBEdit 控件的 MaxLength 属性 时,这并没有阻止我在控件上放置大于代码中 MaxLength 的文本。
例如,当我设置 MaxLength = 12 时,
- 我无法使用键盘输入更长的值
- 我无法使用 copy/paste
粘贴更长的文本
但我可以做到:
Edit1.Text := '012345678901234567890123456789'
这是正常行为吗? Delphi东京也是这样吗?
更重要的是,有没有一种简单的方法可以防止这种情况发生?
10.2也是一样。东京。 属性 TEdit.Text
继承自 TControl
(通过 TCustomEdit
和 TWinControl
)。而TControl.SetText
对MaxLength
一无所知,所以不限制文本长度。它间接发出 CM_TEXTCHANGED
消息,但是 TCustomEdit
拦截了它,也没有使用它来限制文本长度。
防止这种情况的唯一方法可能是不要分配任何超过 12 "characters" 的值,或者将 TCustomEdit
子类化为您自己的 TMyEdit
,在您自己的 TMyEdit
中进行检查 SetText
程序,安装组件并使用它。
我注意到当我设置 Edit 或 DBEdit 控件的 MaxLength 属性 时,这并没有阻止我在控件上放置大于代码中 MaxLength 的文本。
例如,当我设置 MaxLength = 12 时,
- 我无法使用键盘输入更长的值
- 我无法使用 copy/paste 粘贴更长的文本
但我可以做到:
Edit1.Text := '012345678901234567890123456789'
这是正常行为吗? Delphi东京也是这样吗?
更重要的是,有没有一种简单的方法可以防止这种情况发生?
10.2也是一样。东京。 属性 TEdit.Text
继承自 TControl
(通过 TCustomEdit
和 TWinControl
)。而TControl.SetText
对MaxLength
一无所知,所以不限制文本长度。它间接发出 CM_TEXTCHANGED
消息,但是 TCustomEdit
拦截了它,也没有使用它来限制文本长度。
防止这种情况的唯一方法可能是不要分配任何超过 12 "characters" 的值,或者将 TCustomEdit
子类化为您自己的 TMyEdit
,在您自己的 TMyEdit
中进行检查 SetText
程序,安装组件并使用它。