如何在DBEDIT(DBEDIT与一数值型字段连上,)中只输入“+”,“-”  或输入为空时,当焦点转移到其它控件时不提示出错,并将其置零。这个问题搞得我焦头烂额, 请各位高手多多指教,小弟不胜感激。

解决方案 »

  1.   

    DBEDIT 是不可以直接输入文字的所以,在KeyPress时间下写ASCII屏蔽代码是无效的.例如,下面这段代码就无效.
    procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (Key<>#43) and (Key<>#45)Then
        Key:=#0;
    end;但是,我们可以这么写(注意事件的不同):procedure TForm1.DBEdit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if key=VK_ADD Then   //输入"+"
        begin
          DBEdit1.Text:=DBEdit1.Text+'+';
          DBEdit1.SelStart:=length(DBEdit1.Text);
        end;
      if key=VK_SUBTRACT Then  //输入"-"
        begin
          DBEdit1.Text:=DBEdit1.Text+'-';
          DBEdit1.SelStart:=length(DBEdit1.Text);
        end;
    end;当焦点移走时:
    procedure TForm1.DBEdit1Exit(Sender: TObject);
    begin
      DBEdit1.Clear;
    end;
    /**********************************/
          QQ:479543842(大傻瓜)
    /**********************************/
      

  2.   

    我真的太落后了,没有QQ,也没用过,如你不方便的话,可以把资料发到我的EMAIL:[email protected]
      

  3.   

    我的意思是:如果在 DBEDIT 中只输入“+” 或 “-”  或不输入任何东西时,然后当焦点移走时不提示出错,并将 DBEDIT 的值置零。
      

  4.   

    DBEDIT 在不连接数据库时 是不可以直接输入文字的但是在连接数据库后 可以和EDIT一样
    如果 只是要 "不提示出错" 那好办啊。把那段代码 放到Try语句块里
    try
       //你原来的代码段
        ...
        ...
       //你原来的代码段
    except
       ;   //空语句
    end;注:在IDE里直接调试 还是会被IDE捕获运行生成的EXE文件,就不会提示错误了
      

  5.   

    在 DBEdit1Exit 中用 try except end 语句置零,然后编译成生成 EXE 文件运行,就不会提示错误了吗?
    真的?
      

  6.   

    试问;你为什么你非要用dbedit呢?
    当你碰到不可实现或很难实现得功能,或者要用很大得精力和时间来实现一个并不要紧得功能时,
    请注意你可能已经走错路了。
    请回头换个方向吧
      

  7.   

    to gamaster(a明-非sql相关不回) 
    确实是非要用dbedit不可,因我要用它寄挂在一个与同一数据表相连的控件上。
    若然不用根本不能正确显示数据。
    其实我觉得只要能覆盖其出错信息即可,只不过我是新手,不会而矣。
    要是在 VFP 中,这根本不是问题,你们是否觉得 DELPHI 很弱智?
      

  8.   

    这个问题,难道真的没有人遇到过吗?按理来说是,凡是用过 DELPHI 的人应该绝大部分人都会遇到过。为何竞没有人懂呢?真的令人觉得太遗憾了?呜呼!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  9.   

    我正常都用adoquery+edit,而不喜欢用dbedit
      

  10.   

    to siwuge(五哥)  不可能什么情况下都只用 EDIT 吧!
      

  11.   

    前面的兄弟已经说出来了
    IF (KEY IN['+','=']) THEN
      BEGIN
      END;
      

  12.   

    靠,看看楼主怎么说的:to gamaster(a明-非sql相关不回) 
    确实是非要用dbedit不可,因我要用它寄挂在一个与同一数据表相连的控件上。
    若然不用根本不能正确显示数据。
    其实我觉得只要能覆盖其出错信息即可,只不过我是新手,不会而矣。
    要是在 VFP 中,这根本不是问题,你们是否觉得 DELPHI 很弱智?人家已经给你说得非常清楚明白了,自己还搞不清楚,不会多试呀? 我看不是 delphi弱智,是你弱智!
      

  13.   

    to cjs5210(程序员) 
    你们根本不懂我想说什么,就乱说一通,如果只是限制其输入特定字符,还用搞得这么复杂吗?
    在 DBEDIT 中只输入“+”,“-”  或输入为空时,当焦点转移到其它控件之前,它是不会提示出错的. 
    如果在 DBEdit1Exit 中用try except end 进行出错处理,生成的EXE文件后一样会提示错误。
    你还是好好看看题目的意思再说吧,难道你们答对了,我会不给分吗?
      

  14.   

    to lyguo(愚人(每天顶几顶挣分升星星)) 
    很多人都不知道我说什么,就乱说一通.
      

  15.   

    楼主用DBedit来处理数字类型的数据,才会出现输入负(-),正(+),小数点,但是因为DBEDIT直接与数据库连接上,在进行焦点转移时,先进行数据类型校验,然后才会执行ONExit事件,所以只要只输入+,-,.都会报错。除非自己写代码在数据校验前执行(不知道在那儿写),或者重写DBEDIT控件,或者用EDIT来代替它(EDIT是把它作为字符的)。类似的还有日期型字段也有这样的现象。所以一般时自己把datasource中的字段的值装载到edit中,这样自己就很好控制了。
    总之,以上各位的代码是不能解决这个问题。其它语言对这个问题就很好处理。
      

  16.   

    to p_maple(枫树) 
    可惜,你也是一知半解,但我用 edit 来处理或用 DBedit 当作字符型字段来处理又会有其它问题,
    一时之间我又说不清楚,总之我一定要用 DBedit 来处理数据型字段。