簡體   English   中英

將用戶輸入限制為僅數字

[英]Restricting user input to numbers only

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

您實際上不能在控制台應用程序中執行此操作。 您所要做的就是允許用戶輸入錯誤的數據,然后告訴用戶該數據是錯誤的。

您可以嘗試如下操作:

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

如果驗證不是您要進行的方式,則可以執行以下操作:

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 == '.')

您可以編寫一個方法,該方法逐個鍵地讀取 (在控制台中不顯示),忽略非數字字符,打印有效字符並將其附加到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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM