我是一个MFC程序谁是新C#我在寻找一个简单的控制,这将允许多条目的和范围的验证。

有帮助吗?

解决方案

看看在"段"的控制。它已范围的验证,输入总会的数字,它有那些漂亮的增加/减少的按钮。

其他提示

我不得不实施一个控制其只接受的数字,整数或雷亚尔。我建立的控制作为一个专业化的(阅读:源自)文本框控制和使用的输入控制,并定期expresión的验证。增加的范围内验证是非常容易。

这是代码,用于建设regex._numericSeparation是一串人物接受小数值逗号 (例如,'.'或',':10.50美元10,50欧元

private string ComputeRegexPattern()
{
   StringBuilder builder = new StringBuilder();
   if (this._forcePositives)
   {
       builder.Append("([+]|[-])?");
   }
   builder.Append(@"[\d]*((");
   if (!this._useIntegers)
   {
       for (int i = 0; i < this._numericSeparator.Length; i++)
       {
           builder.Append("[").Append(this._numericSeparator[i]).Append("]");
           if ((this._numericSeparator.Length > 0) && (i != (this._numericSeparator.Length - 1)))
           {
               builder.Append("|");
           }
       }
   }
   builder.Append(@")[\d]*)?");
   return builder.ToString();
}

经常表达的任何匹配数量(即任何串数字)只有一个角色作为一个数字分离,和'+'或'-'任择字开头的字符串。一旦创建regex(当instanciating控制),则检查,如果价值是正确的复盖OnValidating方法。CheckValidNumber()只适用Regex介绍的文本。如果regex匹配失败,激活了一个错误提供者与一个指定的错误(定文本与公共财产),并提出了一个文本的事件。在这里你可以做核实知道,如果人数是在需要选的范围。

private bool CheckValidNumber()
{
   if (Regex.Match(this.Text, this.RegexPattern).Value != this.Text)
   {
       this._errorProvider.SetError(this, this.ValidationError);
       return false;
   }
   this._errorProvider.Clear();
   return true;
}

protected override void OnValidating(CancelEventArgs e)
{
   bool flag = this.CheckValidNumber();
   if (!flag)
   {
      e.Cancel = true;
      this.Text = "0";
   }
   base.OnValidating(e);
   if (!flag)
   {
      this.ValidationFail(this, EventArgs.Empty);
   }
}

正如我所说,我也防止用户输入数据中的文本框比其他数字characteres压倒一切的OnKeyPress methdod:

protected override void OnKeyPress(KeyPressEventArgs e)
{
    if ((!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) && (!this._numberSymbols.Contains(e.KeyChar.ToString()) && !this._numericSeparator.Contains(e.KeyChar.ToString())))
    {
        e.Handled = true;
    }
    if (this._numberSymbols.Contains(e.KeyChar.ToString()) && !this._forcePositives)
    {
        e.Handled = true;
    }
    if (this._numericSeparator.Contains(e.KeyChar.ToString()) && this._useIntegers)
    {
        e.Handled = true;
    }
    base.OnKeyPress(e);
}

优雅的接触:我检查的数量有效的用户每次释放的一个关键,使用户可以获得反馈,因为他/她的类型。(但是记住,你必须小心,与ValidationFail事件;))

protected override void OnKeyUp(KeyEventArgs e)
{
    this.CheckValidNumber();
    base.OnKeyUp(e);
}

你可以用一个规则的文本框和一个验证控制来控制输入。

尝试用一种错误提供商控制验证的文本框。你可以使用int。TryParse()或双重。TryParse()检查,如果它的数字,然后验证的范围。

你可以使用一个组合的RequiredFieldValidator和CompareValidator(设DataTypeCheck对于操作者和类型设定为整数)

这将让它有一个正常的文本如果你愿意,否则上述建议是好的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top