0

我通过这个网站找到了不同的帮助,但似乎仍然无法将字符串转换为 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

4 回答 4

4

而不是int.Parse()您应该使用int.TryParse(string,out int)
这种方式,您将能够检查输出并确定字符串是否被正确解析

int i;string s="";
if(int.TryParse(s,out i))
{
 //use i
}
else
{
//show error
}
于 2012-05-25T14:55:42.153 回答
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 ,您可以使用框架提供的布尔方法,这将获得相同的结果..

于 2012-05-25T14:55:46.217 回答
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.
}
于 2012-05-25T14:57:18.617 回答
0

除了Int32.TryParse像其他人指出的那样在按钮 Click 事件处理程序中使用之外,您还需要小心您在 TextBoxChanged事件处理程序中所做的事情。你这里的代码有缺陷:

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 事件处理程序中进行验证。

于 2012-05-25T15:05:52.513 回答