2017-04-24 68 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(); 
}