C# 将文本框转换为整数,从数组中获取字符串

C# 将文本框转换为整数,从数组中获取字符串,c#,integer,C#,Integer,我试图将用户输入从文本框转换为整数(在c#中),然后从具有该整数索引的数组中输出一个值。以下是我代码的一小部分: public Form1() { 初始化组件(); 字符串[]Cmaj=新字符串[7]; Cmaj[1]=“C”; Cmaj[2]=“D”; Cmaj[3]=“E”; Cmaj[4]=“F”; Cmaj[5]=“G”; Cmaj[6]=“A”; Cmaj[7]=“B”; int-roman=int.Parse(textBox3.Text); textBox4.Text=Cmaj[罗马

我试图将用户输入从文本框转换为整数(在c#中),然后从具有该整数索引的数组中输出一个值。以下是我代码的一小部分:

public Form1()
{
初始化组件();
字符串[]Cmaj=新字符串[7];
Cmaj[1]=“C”;
Cmaj[2]=“D”;
Cmaj[3]=“E”;
Cmaj[4]=“F”;
Cmaj[5]=“G”;
Cmaj[6]=“A”;
Cmaj[7]=“B”;
int-roman=int.Parse(textBox3.Text);
textBox4.Text=Cmaj[罗马];
}
但是每次运行这个程序时,我都会得到一个关于“int-roman=int.Parse(textBox3.Text);”的错误(如下所示)。我最初使用Convert.ToInt32而不是int.Parse,但是我看到了关于这个主题的另一个问题,即使用Parse而不是Convert。然而,这并没有多大改变。我该怎么办

错误:
mscorlib.dll中发生类型为“System.FormatException”的未处理异常

其他信息:输入字符串的格式不正确

谢谢。

使用不同的方式

  • Convert.ToInt32(字符串)
  • int val=0;
    Int32.TryParse(字符串,out val)

  • 您位于组件的构造函数中。因此,文本可能为空,并导致异常

    您可能希望在诸如文本更改或按钮单击之类的事件上添加解析逻辑

    因此,从表单生成器添加事件处理程序,然后将逻辑移到该方法中

    为了更好地理解何时调用每个metdod il,我建议您在每个方法的第一个
    {
    上添加一个断点,您可以遵循事件流


    管理错误是一个好主意:您可以使用try…catch或使用需要out变量的int.TryParse进行包装。

    我收到一个关于“int-roman=int.Parse(textBox3.Text);”的错误消息,“我们似乎不需要知道错误消息吗?如果您试图转换用户输入,应该使用
    TryParse()
    感谢您的评论,添加了错误。当我使用TryParse时,我得到:mscorlib.dll中发生了类型为“System.FormatException”的未处理异常。其他信息:输入字符串的格式不正确。在构造函数中,textBox3.Text可能仍然为空。另外,请注意数组是基于0的,因此您应该初始化CMAFrom[0]至[6]。它不应该由用户输入填充吗?该文本框的私有文本框类为空。是的,但您仍然在构造函数中,因此在该时刻之前没有发生任何用户inut。您需要将代码移动到事件处理程序,该事件处理程序会被触发,例如,当用户键入某个内容、离开字段或按下按钮时。我不确定是否我明白你的意思,但我尝试了这两种方法,但得到了相同的错误。mscorlib.dll中出现了System.FormatException“其他信息:输入字符串的格式不正确。仍然不起作用。注释中提到我应该将代码移动到事件处理程序。我不知道您的代码出现了什么错误,但尝试调试您的代码,什么是handle textbox或什么是output,或者尝试静态testI将我的代码放入TextChanged事件处理程序(私有void textBox3_TextChanged(object sender,EventArgs e)),但现在我的主体中的roman“在当前上下文中不存在”你说的主体是什么意思?对不起,应该更准确些。class:public部分类Form1:form没有主体,这是表单的构造函数。在这部分中,只保留initialize组件,其他什么都没有。