文本框接受整数

时间:2012-05-25 14:51:24

标签: c#

我通过这个网站找到了不同的帮助,但似乎仍无法将字符串转换为int。我尝试了很多不同的方法。这是其中两个。在button_click上我需要读取文本框并将它们转换为int,这样我就可以对它们执行标准逻辑。 (a> b函数)。第一部分下面是我在进入文本框时强制使用数字的原因。

    private void write_button_Click(object sender, EventArgs e)
       {
        int mat_od1 = int.Parse(matod_box.Text); //Input string in wrong format.
        int mat_id1 = int.Parse(matid_box.Text);
        int fod1 = int.Parse(fod_box.Text);
        int fid1 = int.Parse(fid_box.Text);
        int hp1 = int.Parse(hp_box.Text);

        //This next section is just to show something else I've tried.

        decimal mat_od = Convert.ToDecimal(matod_box.Text); //Same error.
        decimal mat_id = Convert.ToDecimal(matid_box.Text);
        decimal fod = Convert.ToDecimal(fod_box.Text);
        decimal fid = Convert.ToDecimal(fid_box.Text);
        decimal hp = Convert.ToDecimal(hp_box.Text);
        decimal pass_od = mat_od;

    }

       private void fod_box_TextChanged(object sender, EventArgs e)
    {
        try
        {
            int numinput = int.Parse(fod_box.Text);
            if (numinput < 1 || numinput > 500)
            {
                MessageBox.Show("You must enter a number between 0 and 500.");
            }
        }
        catch (FormatException)
        {

            MessageBox.Show("You need to enter a number.");
            fod_box.Clear();

        }

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:4)

而不是int.Parse()您应该使用int.TryParse(string,out int)
通过这种方式,您可以轻松输出输出并判断字符串是否正确解析

int i;string s="";
if(int.TryParse(s,out i))
{
 //use i
}
else
{
//show error
}

答案 1 :(得分:2)

int.parse转换应该有效,如下例所示:

  string s = "111";
  int i;
  if (int.TryParse(s, out i))
  {
     Console.Write(i);
  }
  else
  {
      Console.Write("conversion failed");
  }

您确定实际为您的整体提供法律意见吗?无论如何,你应该像我在我的样本中那样使用TryParse。没有必要使用try..catch,你可以使用框架提供的布尔方法,这将得到相同的结果..

答案 2 :(得分:1)

全部取决于您允许放在文本框中的内容。

如果它可能不是可以转换为整数的字符串,包括空白,那么

int value;
if (int.TryParse(SomeString, out value)
{
   // it is an int
}
else
{
  // it's not an int, so do nothing raise a message or some such.
}

答案 3 :(得分:0)

除了在其他人指出的按钮Click事件处理程序中使用Int32.TryParse之外,还需要注意在TextBox Changed事件处理程序中执行的操作。你这里的代码是有缺陷的:

private void fod_box_TextChanged(object sender, EventArgs e) 
{ 
    try 
    { 
        int numinput = int.Parse(fod_box.Text); 
        ...
    } 
    catch (FormatException) 
    { 
        MessageBox.Show("You need to enter a number.");  
        fod_box.Clear(); 
    } 

调用foo_box.Clear()将清除文本框中的任何文本,调用TextChanged处理程序再次执行(除非TextBox已经为空)。因此,如果输入非数字值,则消息框将显示两次 - 第一次尝试解析非数字值时,第二次尝试解析空字符串时因调用清除()。

通常,我会避免在Changed事件处理程序中进行验证。