我是一名MFC程序员,他是C#的新手,我正在寻找一种允许数字输入和范围验证的简单控件。
答案 0 :(得分:8)
查看“NumericUpDown”控件。它具有范围验证,输入将始终为数字,并且具有那些漂亮的递增/递减按钮。
答案 1 :(得分:1)
我必须实现一个只接受数字,整数或实数的控件。 我将控件构建为(read:derived from)TextBox控件的特化,并使用输入控件和常规expresión进行验证。 添加范围验证非常简单。
这是构建正则表达式的代码。 _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();
}
正则表达式匹配任何数字(即任何带有数字字符的字符串),只有一个字符作为数字分隔,字符串开头的“+”或“ - ”可选字符。 一旦你创建了正则表达式(当实例化控件时),你检查值是否正确覆盖OnValidating方法。 CheckValidNumber()只是将Regex应用于引入的文本。如果正则表达式匹配失败,则激活具有指定错误的错误提供程序(使用ValidationError公共属性设置)并引发ValidationError事件。 在这里,您可以进行验证,以了解该号码是否在所需的范围内。
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);
}
}
正如我所说,我还阻止用户在文本框中输入数据,而不是数字字符覆盖OnKeyPress方法:
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);
}
答案 2 :(得分:0)
您可以使用常规文本框和Validator控件来控制输入。
答案 3 :(得分:0)
尝试使用错误提供程序控件来验证文本框。您可以使用int.TryParse()或double.TryParse()来检查它是否为数字,然后验证范围。
答案 4 :(得分:0)
您可以使用RequiredFieldValidator和CompareValidator的组合(对于运算符设置为DataTypeCheck,将Type设置为Integer)
如果您愿意,可以使用普通文本框获取,否则上面的建议很好。