只允许在Delphi的TEdit控件中输入数字

3

如何添加只接受数字的 TEdit ?我搜索了很多资料,但没有找到有帮助的信息。

我需要一个只能输入数字而不能输入字母或字符串的 TEdit

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); 
begin 
  if not (Key in [#8, '0'..'9', DecimalSeparator]) then 
  begin
     ShowMessage('Invalid key: ' + Key); 
     Key := #0; 
  end 
  else 
  if (Key = DecimalSeparator) and (Pos(Key, Edit1.Text) > 0) then 
  begin 
    ShowMessage('Invalid Key: twice ' + Key); 
    Key := #0; 
  end; 
end;

我看到你已经得到了一个有关现代Delphi版本的答案。如果您正在使用早期版本,请阅读OLH中有关“编辑掩码”的内容。 - MartynA
1
我的用户(包括我自己)不喜欢控件不接受任何输入。相反,他们希望获得一些反馈,以指示字段中的输入无效。为了满足这个需求,我添加了一个 KeyPress 事件来检查字段是否有效(不仅仅是数字),如果无效,则将背景颜色更改为黄色,并禁用需要此字段有效的任何按钮。另外,有时我会添加一条消息(例如在状态栏中),解释期望的输入类型。 - dummzeuch
在“名称”下面的属性选项卡中,您可以选择“仅数字”。如果将其设置为true,则可以在不进行大量输入的情况下获得相同的效果。 - Spekham2013
2个回答

11

在现代 Delphi 版本(D2009+)中,您可以使用 TEdit.NumbersOnly 属性。

该属性允许仅输入数字到文本编辑框中。 使用 NumbersOnly 可以禁止在文本字段中输入非数字字符。但是请注意,即使设置了此属性,用户仍然可以粘贴非数字字符到文本字段中。

另一个选项是使用 TMaskEdit 组件。 使用以下字符的 EditMask 属性可以生成有效的数字输入,包括负值。

# : Accepts an optional sign or numeric digit
0 : Accepts a numeric character
9 : Accepts an optional numeric character

2
对于旧版Delphi,可以使用SetWindowLong/GWL_STYLE/ES_NUMBER。请注意,这些方案仅适用于正整数。 - MBo

1

对于早期版本的Delphi,如2006版(在@MBo的提示后),代码可以像这样(可以放到Form.OnCreate中):

CurrentStyle := GetWindowLong(Edit1.Handle, GWL_STYLE);
CurrentStyle := CurrentStyle or ES_NUMBER;
SetWindowLong(Edit1.Handle, GWL_STYLE, CurrentStyle);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接