文本框以接受整数

本文关键字:整数 文本 | 更新日期: 2023-09-27 18:35:17

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

任何帮助将不胜感激。

文本框以接受整数

而不是int.Parse()你应该使用int.TryParse(string,out int)
这样,您就可以检查输出并确定字符串是否正确解析

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

int.parse 转换应该可以工作,如以下示例所示:

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

确定你真的为你的ints提供了法律意见吗?在任何情况下,您都应该像我在示例中所做的那样使用 TryParse。没有必要使用try..抓住可以使用框架提供的布尔方法的地方,这将得到相同的结果。

一切都取决于您允许在文本框中放置的内容。

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

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.
}

除了像其他人指出的那样在按钮单击事件处理程序中使用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 处理程序以再次执行(除非文本框已经为空)。 因此,如果您输入非数字值,您的消息框将显示两次 - 第一次是它尝试解析您的非数字值,第二次是当它尝试解析空字符串作为调用 Clear() 的结果时。

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