2013-11-13 18 views
0

У меня есть простое приложение WinForms, которое генерирует случайные числа на основе введенного максимального числа. Для текстового поля максимального числа у меня уже есть код, который проверяет вход «нажатие клавиши» так, чтобы цифры и «.» являются единственными входными символами. Следовательно, допустимы десятичные числа. Тем не менее, я также хочу проверить, что текстовое поле не просто содержит 0 и «.». Контур моего кода показан ниже:Текстовое поле содержит только определенные символы C#

  if(txbInput.Text.Length == 0) 
     { 
      validation fails 
     } 

     else if(txbInput Contains just 0s and .) 
     { 
      validation also fails 
     } 

     else{ 
      do maths 
     } 

Что бы правильный способ сделать это в «другое, если» заявление?

+1

да, было бы, однако, лучше всего использовать регулярные выражения для регулярного выражения. Например, как вы знаете, сколько всего было бы там? Выполнение .Contains («0») не является хорошим и будет сдуваться, даже если у вас есть нуль или нуль. Regex - это сопоставление шаблонов, позволяющее вам выполнять строгий поиск по шаблону, который более надежен, чем выполнение строковых проверок с использованием Contains и т. Д. –

+0

@Ahmedilyas он не использует Содержит, его выражение просто псевдокодом, а не фактическим кодом, и важно, что он использует ** Содержит только ** не только ** Содержит **. –

+0

@KingKing спасибо. Mine также был примером использования строковых методов, содержит, indexof и т. Д. И т. Д. ... :) –

ответ

10

Почему бы вам не использовать Decimal.TryParse или Double.TryParse?

decimal d; 
if(!decimal.TryParse(txbInput.Text, out d)) 
{ 
    // validation fails, output an appropriate message to the user 
} 
else if (d == 0m) 
{ 
    // validation fails, output an appropriate message to the user 
} 
1

Попробуйте использовать NumericUpDown контроль вместо TextBox. Это устранит проверку и анализ в вашем коде, за исключением сравнения его Значение с нулевым значением.
Примечание: Для того, чтобы использовать этот элемент управления для редактирования действительных чисел, установить соответствующие значения свойств DecimalPlaces и инкремент.

0

можно использовать KeyPressEvent для этого ... как

private void tb1_KeyPressed(object o,KeyPressEvents e) 
{ 
    if(/*insert your validation here*/) 
    {//valid case 
     e.Handled=false; 
    } 
    else 
    {//false case 
     e.Handled=true; 
     //inform user about mistake 
    } 
} 

если вы установите обрабатывались = верно, то ничего не произойдет после того, как ключ был нажат. С помощью этого вы можете отжать ключи в текстовом поле

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