C#以整数/字符串搜索第一个数字

时间:2017-02-02 11:25:27

标签: c# string winforms integer

我有一个文本框,人们必须输入一个数字,但我不想让他们先输入数字0,我该怎么做?

示例:如果他们输入,10可以,但如果他们输入010则不行,我想要一个窗口出现并告诉他们再试一次。

谢谢!

6 个答案:

答案 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则不行

如果用户可以键入从0infinity的整数,那么您可以使用:

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;
    }
}