2015-05-25 175 views
0

C#[4小时新增:)的新品牌],但希望在Board Feet Calculator中限制用户输入的指针仅限于数字,不允许使用字母或特殊字符。将用户输入限制为仅限数字

首先,限制发生在类,方法和/或程序中吗? (我相信类和方法)

第二,我已经看到了一个例子,我会用类似的东西吗?

第三,如果是这样,我是否需要为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);