C#文本框只读取决于其他文本

时间:2017-04-24 14:37:16

标签: c# windows-forms-designer

我有一个带有3个文本框的Windows窗体应用程序,如果第一个文本框中的文本为0,则另外两个文本框设置为只读,如果为1,则只读取最后一个文本框,如果是2,所有文本框都是可编辑的。

我的代码有效,但如果我输入一个值然后更改它,程序崩溃了,我该如何解决?

这是我的第一个文本框(NumberOfTusks)的代码,它根据值改变(Tusk1Length)和(Tusk2Length)的只读属性。

private void NumberOfTuskstxt_TextChanged(object sender, EventArgs e)
    {            
            if (int.Parse(NumberOfTuskstxt.Text) == 0)
            {
                Tusk1Lengthtxt.Text = "N/A";
                Tusk1Lengthtxt.ReadOnly = true;
                Tusk2Lengthtxt.Text = "N/A";
                Tusk2Lengthtxt.ReadOnly = true;
            }
            else if (int.Parse(NumberOfTuskstxt.Text) == 1)
            {
                Tusk1Lengthtxt.Text = "";
                Tusk1Lengthtxt.ReadOnly = false;
                Tusk2Lengthtxt.Text = "N/A";
                Tusk2Lengthtxt.ReadOnly = true;
            }
            else
            {
                Tusk1Lengthtxt.Text = "";
                Tusk1Lengthtxt.ReadOnly = false;
                Tusk2Lengthtxt.Text = "";
                Tusk2Lengthtxt.ReadOnly = false;
            }
    }

如果我在NumberOfTusks中输入1,然后将值更改为2,则代码崩溃并给我这个""未处理的类型' System.FormatException'发生在mscorlib.dll"" 撞击退格后发生了崩溃。我怎么能解决这个问题,这样如果我改变了值,它就不会崩溃?

1 个答案:

答案 0 :(得分:1)

这听起来像是当您按下退格键并且正在有效地执行

时发生错误
 if (int.Parse("") == 0)

这将是抛出格式异常的原因。我建议您查看类似

的内容
if (!string.IsNullOrEmpty(NumberOfTuskstxt.Text))
{
  //Your existing code goes here
}
else
{
  //Handle the blank textbox
}

要捎带DangerZone's评论,您可能还想使用TryParse而不是Parse来防止非数字用户输入。