运行时异常时文本框值更改

时间:2017-11-20 16:13:18

标签: c# winforms textbox

我在运行时更改了Textbox的值,但是当用户使用退格键清除Textbox时,我得到了无效字符串的异常。

private void txtTradePrice_TextChanged(object sender, EventArgs e)
{
    txtRate.Text = (Convert.ToInt32(txtTradePrice.Text) * 12).ToString();
}

private void txtRate_TextChanged(object sender, EventArgs e)
{
    txtTradePrice.Text = (Convert.ToInt32(txtRate.Text) / 12).ToString();
}

2 个答案:

答案 0 :(得分:2)

您的代码必须检查字符串是否为空。当用户清除文本时,它变为空,转换为int将抛出异常,并且它不能将空白转换为整数值。

private void txtTradePrice_TextChanged(object sender, EventArgs e)
{
   if(!string.IsNullOrEmpty(txtTradePrice.Text))
   {        
     int number;
     if(Int32.TryParse(txtTradePrice.Text, out number))          
       txtRate.Text = (number * 12).ToString();
   }
}

private void txtRate_TextChanged(object sender, EventArgs e)
{
   if(!string.IsNullOrEmpty(txtRate.Text))    
   {
      int number;          
      if(Int32.TryParse(txtRate.Text, out number))          
         txtTradePrice.Text = (number / 12).ToString();
   }
}

您应该始终使用Int.TryParse。

答案 1 :(得分:0)

你应该使用int.TryParse,因为它处理字符串问题。

private void txtTradePrice_TextChanged(object sender, EventArgs e)
{
    int tradePrice = 0;
    if(int.TryParse(txtTradePrice.Text, out tradePrice))
        txtRate.Text = (tradePrice * 12).ToString();
}

private void txtRate_TextChanged(object sender, EventArgs e)
{
    int rate = 0;
    if(int.TryParse(txtRate.Text, out rate))
        txtTradePrice.Text = (rate / 12).ToString();
}

有了这个,当字段为空时,或者出现任何其他文本问题(如输入中的无效字符)时,不会重新计算任何内容。