我有一个文本框,人们必须输入一个数字,但我不想让他们先输入数字0,我该怎么做?
示例:如果他们输入,10可以,但如果他们输入010则不行,我想要一个窗口出现并告诉他们再试一次。
谢谢!
答案 0 :(得分:2)
将TextChanged
处理程序添加到文本框中(在表单中查找TextBox的事件并输入此名称:TextBox_TextChanged
):
void TextBox_TextChanged(object sender, EventArgs e)
{
var textBox = sender as TextBox;
if (textBox != null)
{
textBox.Text = textBox.Text.Trim();
if (textBox.Text.Length > 0 && textBox.Text[0] == '0')
{
textBox.Text = textBox.Text.TrimStart('0');
MessageBox.Show("Incorrect value");
}
}
}
或代码:
TextBox textBox = new TextBox();
textBox.TextChanged += TextBox_TextChanged;
答案 1 :(得分:1)
使用TextChanged
事件。 (双击设计器中文本框属性中的事件)在此示例中,在比较前修剪任何前导空格,如果是0
private void textBox1_TextChanged(object sender, EventArgs e)
{
string input = textBox1.Text.TrimStart(' ');
if (input.Length == 1)
{
textBox1.Text = input == "0" ? "" : input;
}
}
修改强>
正如m.rogalski和Roma所指出的,上面的版本允许在输入有效字符后输入0。以下版本将纠正这个错误:
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text.TrimStart('0');
}
答案 2 :(得分:1)
这应该有效:
private void MyTextBox_TextChanged(object sender, EventArgs e)
{
var textBox = sender as TextBox;
if (textBox.Text.StartsWith("0"))
//alert user
MessageBox.Show("Invalid starting character");
}
当然,您需要在设计器或代码中绑定TextChanged事件:
MyTextBox.TextChanged += MyTextBox_TextChanged;
答案 3 :(得分:1)
从beginnign开始:
如果他们输入,10可以,但如果输入010则不行
如果用户可以键入从0
到infinity
的整数,那么您可以使用:
if(textBox.Text.Length > 1 && textBox.Text[0] == '0')
这假设用户可以输入' 0' 0作为第一个标志,只有它只是标志。如果那不是您想要的,那么请将其更改为:
if(textBox.Text.Length > 0 && textBox.Text[0] == '0')
更进一步:
我想要一个窗口出现并告诉他们再试一次
您可以在MessageBox
:
textBox
和明文
textBox.Text = string.Empty;
MessageBox.Show("Value entered is incorrect. Please try again");
然后将这些组合起来就像:
if(textBox.Text.Length > 1/* or 0 depending on what you need */ && textBox.Text[0] == '0')
{
textBox.Text = string.Empty;
MessageBox.Show("Value entered is incorrect. Please try again");
}
答案 4 :(得分:0)
将此代码放在Initialize方法
之后textBox1.TextChanged = (s, o) =>
{
if (textBox1.Text.StartsWith("0"))
{
textBox1.Text = textBox1.Text.Remove(0, 1);
MessageBox.Show("Cant start with '0'");
}
};
答案 5 :(得分:0)
也许你可以有一个表示一些文本框的ViewModel,其中一个是你的“数字”文本框。然后,您可以使用Number属性上的属性来确保它已经过验证。
public class MyViewModel
{
...
[Required]
[NumberValidation]
string NumberTextBox {get;set;}
其中NumberValidation是另一个实现ValidationAttribute
的公共类[AttributeUsage(AttributeTargets.Property]
public class NumberValidation : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value.StartsWith("0"))
{
return new ValidationResult(ErrorMessage, "Please enter another number!");
}
return ValidationResult.Success;
}
}