2017-02-02 7 views
-1

У меня есть текстовое поле, где люди должны ввести число, но я не хочу, чтобы они сначала вводили число 0, как это сделать?C# Поиск первого числа в integer/string

Пример: Если они печатают, 10 это нормально, но если они набирают 010, это не нормально, и я хочу, чтобы появилось окно и попросило повторить попытку.

Спасибо!

+2

Вы говорите о Windows Forms, WPF или любой другой структуры пользовательского интерфейса? Используйте соответствующий тег. –

+2

ok - так что вы пробовали? – BugFinder

+0

И еще, пожалуйста, покажите свои предложения, в частности ваш код. – HimBromBeere

ответ

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

EDIT

Как остроконечный из-за m.rogalski и Roma версия выше позволяет вводить 0 после ввода действительного символа. Эта версия ниже будет исправить эту ошибку:

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    textBox1.Text = textBox1.Text.TrimStart('0'); 
} 
+0

Это сработало, спасибо помощнику! –

+0

Это только проверка, если входной сигнал равен 1 знаку, что не будет ловить первый '0' в' 010' –

+0

@ m.rogalski не совсем. Он действует только на первый реальный характер. Это не позволит вам поставить '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; 
+0

Это может вызвать 'NullReferenceException', когда отправитель не является' TextBox' –

+0

e.Handled = true; ручки красные –

+0

В базовом 'EventArgs' нет свойства' Handled'. –

0

поместить этот код после Initialize метод

textBox1.TextChanged = (s, o) => 
{ 
    if (textBox1.Text.StartsWith("0")) 
    { 
     textBox1.Text = textBox1.Text.Remove(0, 1); 
     MessageBox.Show("Cant start with '0'"); 
    } 
}; 
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; 
1

Запуск от начального:

Если типа у, 10 это нормально, но если они типа 010 это не нормально

Если это хорошо для пользователя ввести целое число в диапазоне от 0 до infinity, то вы можете использовать это:

if(textBox.Text.Length > 1 && textBox.Text[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"); 
} 
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; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^