2015-05-25 2 views
0

Совершенно новый для C# [4 часа новый :)], но надеется, что некоторые указатели на калькуляторе плат платят, ограничивая ввод пользователя только номерами, не допускают буквы или специальные символы.Ограничение ввода пользователя только на номера

Во-первых, существует ли ограничение в классе, методе и/или программе? (Я считаю, что класс и метод)

Во-вторых, я видел пример ниже, мог бы я использовать что-то похожее на это?

В-третьих, если это так, мне нужно сделать отдельные классы для KeyPress и KeyPressEventArgs? (Я считаю, что они автоматически там, например, public char KeyChar { get; set; }

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    // allows only letters 
    if (!char.IsLetter(e.KeyChar)) 
    { 
     e.Handled = true; 
    } 
} 

Моя программа

namespace BoardFt_MyTry_ 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Board board = new Board(); 

     board.lengthOfboard = Convert.ToDouble(askQuestion("What is the length of your board in inches?")); 
     board.widthOfboard = Convert.ToDouble(askQuestion("What is the width of your board in inches?")); 
     board.thicknessOfboard = Convert.ToDouble(askQuestion("What is the thickness of your board in inches?")); 

     Console.WriteLine("Your board has {0} board feet.", board.CalcBoardFt()); 

     Console.ReadLine(); 
    } 
    private static string askQuestion(string question) 
    { 
     Console.WriteLine(question); 
     return Console.ReadLine(); 
    } 

} 

Мой совет Класс

namespace BoardFt_MyTry_ 
{ 
    class Board 
    { 
     public double lengthOfboard; 
     public double widthOfboard; 
     public double thicknessOfboard; 

    public double CalcBoardFt() 
    { 
     double boardft = 0; 

     boardft = (this.lengthOfboard * this.widthOfboard * this.thicknessOfboard)/144; 

     return boardft; 
    } 
} 
} 
+0

Это, как правило, называется «проверка». –

+0

Не делайте этого - разрешите пользователям вводить цифры с дополнительными символами, например. пробелы, запятые, +, -, затем фильтровать вход или отклонять ввод в зависимости от результатов проверки. То есть +1,000, - 1 000, 1e3, 0.1e + 4 в порядке, 1j34 - нет. –

+0

Спасибо, Джон за разъяснение, что оба они являются «валидацией», а также подтверждение мне нужно принять плохой ввод и сообщить пользователю, что это плохо. (Я бы поднял, но имею 1 репутацию). – vayden12

ответ

5

Вы не можете сделать это в консольном приложении. Все, что вы можете do позволяет пользователю вводить плохие данные, а затем сообщать пользователю, что данные плохие.

Вы можете попробовать что-то вроде этого:

class Program 
{ 
    public double AskDnoubleQuestion(string message){ 
     do { 
     Console.Write(message); 
     var input = Console.ReadLine(); 

     if (String.IsNullOrEmpty(input)){ 
      Console.WriteLine("Input is required"); 
      continue; 
     } 
     double result; 
     if (!double.TryParse(input, out result)){ 
      Console.WriteLine("Invalid input - must be a valid double"); 
      continue; 
     } 
     return result; 
    } 

    static void Main(string[] args) 
    { 
     Board board = new Board(); 

    board.lengthOfboard = AskDoubleQuestion("What is the length of your board in inches?"); 
    board.widthOfboard = AskDoubleQuestion(askQuestion("What is the width of your board in inches?"); 
    board.thicknessOfboard = AskDoubleQuestion(askQuestion("What is the thickness of your board in inches?"); 

    Console.WriteLine("Your board has {0} board feet.", board.CalcBoardFt()); 

    Console.ReadLine(); 
} 
1

В проверке случае это не так, как вы хотите продолжить, вы могли бы сделать что-то вроде этого:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Enter a number:"); 

     string number = ReadNumber(); 
     Console.WriteLine("You entered: " + number); 
    } 

    private static string ReadNumber() 
    { 
     string input = ""; 

     do 
     { 
      ConsoleKeyInfo keyInfo = Console.ReadKey(true); 
      if (char.IsNumber(keyInfo.KeyChar)) 
      { 
       input = input + keyInfo.KeyChar; 
       Console.Write(keyInfo.KeyChar); 
      } 
      if (keyInfo.Key == ConsoleKey.Enter) 
      { 
       Console.WriteLine(); 
       break; 
      } 
      if (keyInfo.Key == ConsoleKey.Backspace) 
      { 
       input = input.Substring(0, input.Length - 1); 
       Console.Write("\b \b"); 
      } 
     } while (true); 

     return input; 
    } 
} 

Это позволит пользователю вводить только номера. Вы можете отфильтровать его так или иначе, если хотите. Например, только буквы и цифры и т. Д.

Поскольку он стоит прямо сейчас, он допускает только целые числа. Если вы хотите, чтобы десятичную точку, измените строку выше этого: if (char.IsNumber(keyInfo.KeyChar) || keyInfo.KeyChar == '.')

0

Вы могли бы написать метод, который считывает ключ с помощью ключа (не отображается в консоли), игнорирует нечисловые символы, гравюр допустимые символы и добавляет их к StringBuilder например, вот так:

public static string ReadOnlyNumbers() 
{ 
    StringBuilder input = new StringBuilder(); 
    ConsoleKeyInfo ckey; 

    while ((ckey = Console.ReadKey(true)).Key != ConsoleKey.Enter) 
    { 
     if (Char.IsDigit(ckey.KeyChar)) 
     { 
      Console.Write(ckey.KeyChar); 
      input.Append(ckey.KeyChar); 
     } 

     if (ckey.Key == ConsoleKey.Backspace) 
     { 
      input.Length--; 
      Console.Write("\b \b"); 
     } 
    } 

    Console.Write(Environment.NewLine); 
    return input.ToString(); 
} 

Вы могли бы использовать его как это:

string input = ReadOnlyNumbers(); 
Console.WriteLine(input); 
Смежные вопросы