题
我是一个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对于操作者和类型设定为整数)
这将让它有一个正常的文本如果你愿意,否则上述建议是好的。