DElPHI中,如何在文本框中输入错误数据是给出提示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DElPHI中,如何在文本框中输入错误数据是给出提示相关的知识,希望对你有一定的参考价值。

if not (key in ['0'..'9',#13,#8,#45]) then key:=#0;
if Key=#13 then
if (edit2.Text='')or(edit2.Text='-') then showmessage('输入有误,请重新输入!')
............
在文本框中,只能输入正整数,0,负整数,其中字母、“+”.“*”,“/”等符号都已被限制,只能输入数字与“-”,可是输入“8-”,“--”,“---”,“2-5”,“-5-”这类字符时不能给出提示,如何添加代码避免这类错误数据的输入?

参考技术A 我觉得实在没必要手动编写验证代码来完成这项工作,完全可以用TSpinEdit控件来代替啊。

TSpingEdit控件支持输入正整数,0,负整数,而且,自带的支持像你上面说的验证什么的,如果输入错误的话,会“叮叮”喇叭报警。

如果非要用edit控件的话,我的建议是:

1. 检测输入的字符在规定的集合内,就像你上面代码写的。

2. 再过滤完字符后,再尝试转换成整数或检测是不是合法的数。追问

数据必须从键盘输入。

参考技术B if (Key in [#45,#13] )and (Edit2.Postion >1 )then
begin
Key := #0;

showmessage('输入有误,请重新输入!')

end ;
貌似是这个,我这没编译环境,就是在获得非数字值 时查看光标在何位置,如果不在首位,则不接受该值追问

Edit2没有Postion这个属性,编译时出错

追答

是类似这个属性

参考技术C if rightstr(edit2.text,1)='-' or (pos('-',edit2.text)>0 and pos('-',edit2.text)<>1)本回答被提问者采纳

Delphi 7 - 如何使用输入框

【中文标题】Delphi 7 - 如何使用输入框【英文标题】:Delphi 7 - how to use Inputbox 【发布时间】:2013-05-25 16:44:34 【问题描述】:

我正在编写一个程序,您必须在 InputBox 中输入密码才能访问程序的最小功能。但是,如果您在输入框中单击取消,我的程序会给出错误消息。所以我想知道是否有人知道我怎样才能做到这一点,因为使用 Messagedlg 我知道你使用 IF 。但是我怎样才能用 InputBox 把它弄好呢?

【问题讨论】:

请向我们展示您的代码) 【参考方案1】:

InputBox()如果对话框被取消,则返回一个空字符串,例如:

var
  Pass: String;

Pass := InputBox('Password needed', 'Enter the password:');
if Pass <> '' then
begin
  // use Pass as needed...
end;

或者,使用InputQuery() 代替,它返回一个Boolean 来指示对话是否被取消,例如:

var
  Pass: String;

if InputQuery('Password needed', 'Enter the password:', Pass) then
begin
  // use Pass as needed...
end;

【讨论】:

@Remy_Lebeau 感谢您的帮助,我会去尝试的。我还有 1 个问题,你知道如何让输入框被屏蔽吗?我知道要改变什么,但我需要编写一个知道的 InputBox 函数吗?? @CordreSmith 关于屏蔽输入框***.com/q/591333/1699210 将#31+'输入密码'作为第二个参数传递给 InputQuery 会导致框中的 TEdit 回显密码字符而不是输入的文本。 @Freddiebell:任何低于#32 的值都会导致TEdit.PasswordChar 被设置为'*'。但是,该功能是在 XE2 中引入的,因此在 D7 中不存在。【参考方案2】:

很多时候最好有一个自定义的 InputQuery

function InputValor(const aCaption: String; APrompt: string; var aValor: 
String): Boolean;
var
    vForm  : TForm;
    vLabel : TLabel;
    vBtnOk : TBitBtn;
    vValor : TEdit;
    vBtnCancel : TBitBtn;
begin
    Result  := False;
    vForm   := TForm.Create(Application);
    vLabel  := TLabel.Create(vForm);
    vValor  := TEdit.Create(vForm);
    vBtnOk  := TBitBtn.Create(vForm);
    vBtnCancel := TBitBtn.Create(vForm);

    with vForm do
    begin
        Name           := 'frmValor';
        Position       := poScreenCenter;
        BorderIcons    := [biSystemMenu];
        BorderStyle    := bsDialog;
        Caption        := aCaption;
        ClientHeight   := 150;
        ClientWidth    := 515;
        Color          := clBtnFace;
        OldCreateOrder := False;
        Font.Charset   := DEFAULT_CHARSET;
        Font.Color     := clWindowText;
        Font.Height    := -11;
        Font.Name      := 'Tahoma';
        Font.Style     := [];
        OldCreateOrder := False;
        PixelsPerInch  := 96;
        Left           := 0;
        Top            := 0;
    end;

    with vLabel do
    begin
        Name     := 'vLabel';
        Parent   := vForm;
        AutoSize := False;
        Left     := 18;
        Top      := 15;
        Width    := 484;
        Height   := 41;
        Caption  := APrompt;
        WordWrap := True;
    end;

    with vValor do
    begin
        Name      := 'vValorEdit';
        Parent    := vForm;
        Left      := 18;
        Top       := 62;
        Width     := 484;
        Height    := 21;
        Text      := '';
    end;

    with vBtnOk do
    begin
        Name        := 'vBtnOk';
        Parent      := vForm;
        Caption     := 'Aceptar';
        Left        := 335;
        Top         := 103;
        Width       := 75;
        Height      := 25;
        TabOrder    := 1;
        ModalResult := mrOk;
    end;

    with vBtnCancel do
    begin
        Name        := 'vBtnCancel';
        Parent      := vForm;
        Caption     := 'Cancelar';
        Left        := 427;
        Top         := 103;
        Width       := 75;
        Height      := 25;
        TabOrder    := 2;
        ModalResult := mrCancel;
    end;

    vForm.ShowModal;

    if (vForm.ModalResult = mrOk) and (vValor.Text <> '') then
    begin
        Result := True;
        aValor := vValor.Text;
    end else
    begin
        Result := False;
        aValor := '';
    end;

    FreeAndNil(vForm);
end;

使用方式与官方相同:

var
    vTest : String;
begin
    if (InputValor('Title', 'Label text', vTest) = True) then
        ShowMessage(vTest);
end;

【讨论】:

以上是关于DElPHI中,如何在文本框中输入错误数据是给出提示的主要内容,如果未能解决你的问题,请参考以下文章

在搜索文本框中输入日期值时如何避免 ajax 错误?

如何检查 html 文本框中给出的 php 中的数据类型?

如何判断delphi文本框输入的是数字

防止在文本框中输入非 ascii 字符

如何在消息框中显示数据库值

如何在文本框中选择文本?