【问题标题】:TEdit Input Validation on C++ Builder XE8C++ Builder XE8 上的 TEdit 输入验证
【发布时间】:2015-08-04 03:18:58
【问题描述】:

我是 C++ Builder XE8 的新手。

我希望必须输入的数字的最小和最大长度为六个数字,我还需要确保只输入数字(0 是例外),而不是字母字符、退格、标点符号,等等

如果输入的不是数字,我还想生成一个错误框。

我尝试了一些代码组合,其中三个如下所示,但这些代码都不起作用。

任何帮助都将不胜感激!

(1).

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
{
  Edit1->MaxLength = 6;

  if (!((int)Key == 1-9)) {
  ShowMessage("Please enter numerals only");
  Key = 0;
  }
}

(2).

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
{
  Edit1->MaxLength = 6;

  if (Key <1 && Key >9) {
  ShowMessage("Please enter numerals only");
  Key = 0;
  }
}

(3).

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
{
  Edit1->MaxLength = 6;

  if( Key == VK_BACK )
   return;

  if( (Key >= 1) && (Key <= 9) )
   {
  if(Edit1->Text.Pos(1-9) != 1 )
   ShowMessage("Please enter numerals only");
   Key = 1;
  return;
  }
}

【问题讨论】:

    标签: c++ c++builder c++builder-xe8


    【解决方案1】:

    TEdit 有一个NumbersOnly 属性:

    只允许在文本编辑中输入数字。

    将其设置为 true 并让操作系统为您处理验证。但是,如果您想手动验证它,请使用:

    void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
    {
        // set this at design-time, or at least
        // in the Form's constructor. It does not
        // belong here...
        //Edit1->MaxLength = 6;
    
        if( Key == VK_BACK )
            return;
    
        if( (Key < L'0') || (Key > L'9') )
        {
            ShowMessage("Please enter numerals only");
            Key = 0;
        }
    }
    

    【讨论】:

    • 感谢您的帮助。但是,您能重新阅读我上面的问题吗?因为虽然您的代码有效,但仍然无法阻止输入至少 6 个数字的输入长度
    • @Romeo 您无法验证按键事件的最小长度。你怎么知道用户是否会继续写作?正确的解决方案是在控件失去焦点或您准备好使用这些值(例如,单击按钮)时验证输入值。在那里您可以根据需要验证长度和内容。
    • @Romeo:正如我在代码示例中提到的,您仍然可以设置MaxLength 值,只是不要在OnKeyPress 事件中这样做。
    • @RodrigoGómez:如果在编辑失去焦点时进行验证,则必须小心。当OnExit 事件被触发时,输入焦点已经在移动到另一个窗口的过程中。如果你做了任何事情来导致不同的窗口获得焦点,比如显示弹出消息,你真的可以把 Windows/VCL 窗口管理搞砸到你的 UI 停止正常工作的地步。例如,对按钮单击进行验证是很好且首选的。
    • @Rodrigo:你是对的。目的是定期强制用户输入最小设置长度 6。
    【解决方案2】:

    查看TMaskEdithttp://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devwin32/idh_useop_textcontrols_xml.html

    TMaskEdit 是一个特殊的编辑控件,它根据对文本可以采用的有效形式进行编码的掩码来验证输入的文本。掩码还可以格式化显示给用户的文本。

    编辑:设置最小长度

    void __fastcall TForm1::MaskEdit1Exit(TObject *Sender)
    {
       if (MaskEdit1->Text.length() < 6)
       {
         //your error message, or throw an exception.
       }
    }
    

    【讨论】:

    • 谢谢,但能否提供一种输入至少6个数字长度的方法?
    • @Romeo 设置MaxLength 属性以将输入限制为6 个字符。如果您想检查 最小 长度,请在 OnExit 事件中执行此操作。您可以在 TEdit 或 TMaskEdit 控件中执行此操作。
    • 但是我的意思是当输入少于六个数字时,就会产生错误。如何在OnExit 事件中做到这一点?。
    • @Romeo 看看我更新的答案。如果您阅读一些文档,所有这些都很容易弄清楚。
    猜你喜欢
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2012-10-11
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多