捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:另一种方法使Edit只接收数字
hackering 14565 2005/5/7 19:53:26
赫赫,我更喜欢用trystrtofloat
jf2004 14411 2005/4/28 11:36:51
if (key in ['0'..'9',#46,#8]) then
   begin
    if key=#46  then
       begin
       if  pos('.',edit3.Text)>0  then
       key:=#0;
       end;
   end
else
   key:=#0;
可以用小数点啊 并且限制只能有一个小数点的啊 
你也可以再加上小数点后的位数啊
chenboy 13359 2005/3/21 0:36:19
procedure TFrm_gasstation_box.Edit1KeyPress(Sender: TObject;
  var Key: Char);
begin
if not (key in ['0'..'9',Chr(8),'.'])  then
key:=#0;
end;
就是不能输入特殊字符如何解决?在集合中加入就好了,Chr(8),回删键,呵呵!
jsyzzjp 12308 2005/1/31 13:42:44
 其实可以换一种方式实现的。

就是利用异常处理的方式来处理。

  首先定一个浮点数H

  给它一个初始值(在程序开始的时候)然后这样
 在EditChange(Sender: TObject)事件中添加如下代码
 try
   h:= strtofloat(edit.text);
   
  except
  
   edit.Text :=floattostr(h);
   
  end;

 所有的问题都能解决。
nbadjack 11416 2005/1/7 21:31:53
兄第们啊,有关光输入数字,也不要KeyPress中限制其他控制键的使用啊,比如,你输错了,也要DEL来处理
yixuefeng 10647 2004/12/18 9:56:38
procedure TFrm_gasstation_box.Edit1KeyPress(Sender: TObject;
  var Key: Char);
begin
if not (key in['0'..'9'])  then
key:=#0;
end;
就是不能输入特殊字符如何解决
fanshiyou 7932 2004/8/20 13:20:38
还有就是不能输入点如果要小数就不行了
iamdream 7297 2004/7/29 13:04:34
唉,首先要限制只能输入数字(楼主说的是一种方法),然后再用我的那个Change事件实现方法来限制粘贴非法字符串;
至于你想输入更大的整数,可自己写一个函数(很简单,只要判断是否全是数字即可),不过对于一般应用来说,你输入了太大的数字恐怕也没什么意义吧?
看看我下面的实现:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 fstyle: dWord;
begin
 fstyle := GetWindowLong(Edit1.Handle, GWL_STYLE);
 SetWindowLong(Edit1.Handle, GWL_STYLE, fstyle or ES_NUMBER);
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
  i: Integer;
begin
  if (Sender is TEdit) and ((Sender as TEdit).Text <> ') then
  begin
    for i:=1 to Length(TEdit(Sender).Text) do
      if not ((Sender as TEdit).Text[i] in ['0'..'9']) then
      begin
        (Sender as TEdit).Undo();
        (Sender as TEdit).ClearUndo();
        Break;
      end;
  end;
end;

end.
crazybugcn 7295 2004/7/29 12:39:19
楼下的想说什么?说吧!
crazybugcn 7294 2004/7/29 12:37:29
我试了下面这个方法,有点好象是筛选数字一样:
解决了长度限制的问题,但是感觉还是不妥啊!

procedure SetEnterNumberOnly(ACustomEdit: TCustomEdit);
var
  i: Integer;
begin
  for i := 1 to Length(Trim(ACustomEdit.Text))  do    // Iterate
  begin
    try
      StrToInt(Copy(Trim(ACustomEdit.Text), i, 1));
    except
      ACustomEdit.Text := Copy(Trim(ACustomEdit.Text), 0, i -1) + 
        Copy(Trim(ACustomEdit.Text), i + 1, Length(Trim(ACustomEdit.Text)));
    end;
  end;    // for

end;
crazybugcn 7292 2004/7/29 12:12:25
~^~
crazybugcn 7284 2004/7/29 11:22:03
多输入了几个数字时,突然敲错了敲入了非数字字符,竟然全清空了,白干了。当辛苦的输入一些数字,只是最后多输了一个数字也全被清空了。你说这样能行吗~
crazybugcn 7282 2004/7/29 11:12:38
to iamdream:既然你认为你的程序没有不足之处,我就说下吧。

不足之处:不能输入大于21474836的数。比如要输入10位数的编号,如3101040001就不行了,换句话说,控制了只能输入数字,但是同时也控制主了只能输入的长度。
就算换做StrToInt64((Sender as TEdit).Text);,同样长度是受限制的。
vagrant 7257 2004/7/28 21:14:17
我也觉得根本就不是批评不批评的问题。
就一句垃圾,还什么可叹啊。
iamdream 7227 2004/7/28 12:02:52
我以为如果你觉得不好,那你至少应指出不好在哪里?否则还谈什么交流?如果你能提出更好的方法那对大家就更好了,而不是仅仅说一声“垃圾”了事。
crazybugcn 7220 2004/7/28 9:33:26
楼上的一点这样的批评都听不进去?可叹啊!
不过到目前为止你的这个程序的处理方法还是比较好的!
iamdream 7193 2004/7/27 12:10:38
To crazybugcn:
别人说的是垃圾,那你有什么高招呢?别连垃圾都写不出来啊?大家是来讨论问题的,如果大家都是高手,那咱们做的软件恐怕也不是现在这个样子了!
不过,我以为有比没有好,况且做软件就要做好,否则始终只能亦步亦趋!
crazybugcn 7190 2004/7/27 11:11:46
都是垃圾
vagrant 3034 2004/3/11 11:31:41
to  kukuasir:
用Copy,Paste仍然可以粘貼非數字的.........
seucag 3023 2004/3/11 10:14:53
呵呵,有的时候大家把问题都复杂化了
第一页 上一页 下一页 最后页 有 26 条纪录 共2页 1 - 20
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表