簡體   English   中英

使用 try-catch 的系統異常

[英]system exception using try-catch

所以我有一個例外的問題。 我正在制作一個劊子手游戲,用戶需要輸入一個字母(帶有猜測的框),但我只希望他們可以輸入來自 AZ 的字母而不是數字。

在我編寫的代碼中,我將帶有猜測名稱的框命名為choosed_lettre並將其轉換為“字母”。

問題
- 我怎樣才能例外它只需要字母而不是數字?

代碼

 private void Choosed_lettre_KeyDown_1(object sender, KeyEventArgs e)
        {
            char letter = ' ';
            bool validation = false;
            if (e.Key == Key.Enter && choosed_lettre.Text != "")
            {
                do
                {
                    try //trycatch
                    {
                        string input = Convert.ToString(choosed_lettre.Text);
                        input = input.ToLower();
                        letter = Convert.ToChar(input[0]);
                        validation = true;
                    }
                    catch (SystemException)
                    {
                        choosed_lettre.Text = "";
                        return;
                    }
                } while (validation == false && !((letter >= 'a' && letter <= 'z') && (letter >= 0 && letter <= 9)));
            }

wpfscreen

wpfscreen

旁注:使用string.IsNullOrEmpty(choosed_lettre.Text)而不是與空字符串進行比較。

string input = Convert.ToString(choosed_lettre.Text); 是不必要的,因為Text porerty 已經是一個字符串。 使用string input = choosed_lettre.Text;

另外,避免程序員可以處理的異常 因此,檢查input的長度是否為 1 並且是字母。 更好的是,您可以使用出色的方法TryParse :這樣做將大大簡化代碼:

if (e.Key == Key.Enter)
{
    if(! char.TryParse(choosed_lettre.Text, out char letter))
        choosed_lettre.Text = "";
    if(! char.IsLetter(letter))
        choosed_lettre.Text = "";
}

歡迎來到 SO!

如果您改用TextInput處理程序會更好:

public MainWindow()
{
    InitializeComponent();
    this.TextInput += MainWindow_TextInput;
}

private void MainWindow_TextInput(object sender, TextCompositionEventArgs e)
{
    var isLetter = Char.IsLetter(e.Text, 0);
    // do something here
}

暫無
暫無

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

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