2017-04-24 54 views
1

我在Windows窗體中製作了一個計算器,當用戶試圖用非數值進行加/減/除/乘時,我想彈出一個消息框。我已經看過可以修復的舊論壇,但目前爲止似乎沒有任何工作可行。限制操作中的非數字值

,這裏是我的乘按鈕的代碼:

private void buttonMul_Click(object sender, KeyPressEventArgs e) 
{ 
    Operand1 = Convert.ToDouble(textOperand1.Text); 
    Operand2 = Convert.ToDouble(textOperand2.Text); 
    result = Operand1 * Operand2; 
    textresult.Text = result.ToString(); 
} 
+0

看看'Double.TryParse'方法 – dcg

+0

您可以使用try和catch塊,並創建消息在catch塊彈出框。這將顯示的是try塊不起作用。或者你可以使用Double.TryParse()方法。 –

+3

我建議你防止用戶在第一個地方輸入無效輸入,而不是讓他們輸入無效輸入,然後在它們上面播放「gotcha」類型的錯誤消息。 –

回答

2

而不是拋出一個錯誤,當他們進入不正確的輸入類型的用戶,進入任何東西,但數字開始與阻止他們。

事件

在文本框使用一個按鍵事件,像這樣:

private void textBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    // Get reference to calling control 
    TextBox textBox = sender as TextBox; 

    // Only allow 0-9, ., - 
    if (!char.IsControl(e.KeyChar) && 
     !char.IsDigit(e.KeyChar) && 
     e.KeyChar != '-' && 
     e.KeyChar != '.') 
    { 
     e.Handled = true; 
    } 

    // Avoid double decimals 
    if (e.KeyChar == '.' && textBox.Text.IndexOf('.') > -1) 
    { 
     e.Handled = true; 
    } 

    // Ensure hyphen is at the beginning 
    if (e.KeyChar == '-' && 
     (textBox.Text.Contains('-') || 
     textBox.SelectionStart != 0)) 
    { 
     e.Handled = true; 
    } 
} 

這將只允許數值,小數,並且要輸入連字符。此外,這還會阻止輸入中的1位十進制.,並確保用戶只能在文本的開頭輸入連字符-

註冊事件處理

註冊此事件處理程序只需添加這行代碼到你的構造函數形式。

// Be sure to change yourtextcontrol to the appropriate name. 
yourtextcontrol.KeyPress += new KeyPressEventHandler(textBox_KeyPress); 

驗證輸入

您還應該使用TryParse在點擊事件要仔細檢查的條目。

private void buttonMul_Click(object sender, KeyPressEventArgs e) 
{ 
    if (double.TryParse(textOperand1.Text, out Operand1) && 
     double.TryParse(textOperand2.Text, out Operand2)) 
    { 
     result = Operand1 * Operand2; 
     textresult.Text = result.ToString(); 
    } 
    else 
    { 
     // Error here. You can use a messagebox or whatever suits you. 
    } 
} 
+0

還需要確保減號在開始時只存在一次。 – juharr

+0

@juharr良好的通話。我會更新。 –

+0

什麼是關鍵字符? – Morgan

2

如果由於某種原因,他們必須能夠輸入除計算器中某些其他功能以外的其他內容。您可以使用TryParse這將返回false,如果該值不能被解析,然後顯示在MessageBox

private void buttonMul_Click(object sender, EventArgs e) 
{ 
    bool operand1Parsed = double.TryParse(textOperand1.Text, out Operand1); 
    bool operand2Parsed = double.TryParse(textOperand2.Text, out Operand2); 

    //If we could not parse one of them. 
    if(!operand1Parsed || !operand2Parsed) 
    { 
     MessageBox.Show("Your message"); 
     return; 
    } 

    result = Operand1 * Operand2; 
    textresult.Text = result.ToString(); 
}