使用手动文本框时,对象引用未设置为对象的实例(Textbox tb =(Textbox))

时间:2014-08-20 10:04:46

标签: c# winforms nullreferenceexception

我有30个左右的文本框,我按顺序标记{ex:R1C1B1,R1C2B1,R2C1B1,...}

这是我的代码:

    private void Solve(int row, int column, int box)
    {
        string numbers = "123456789";
        TextBox newTextBox = (TextBox)Controls.Find(string.Format("tbox{0}", "R" + row.ToString() + "C" + column.ToString() + "B" + box.ToString()), false).FirstOrDefault();

        MessageBox.Show(newTextBox.Text);

        if (newTextBox.Text != "")
         {
            return;
         }

        numbers = numbers.Replace(checkRow(row, column), "");
        numbers = numbers.Replace(checkColumn(row, column), "");
        numbers = numbers.Replace(checkBoxPos(row, column), "");

        if (numbers.Length == 1)
         {
            newTextBox.Text = numbers;
         }
    }

每当我尝试使用MessageBox.Show查看文本框中的内容时,我会在标题中看到错误。以下是所有错误:

SudokuSolver.exe中出现未处理的“System.NullReferenceException”类型异常

附加信息:未将对象引用设置为对象的实例。

3 个答案:

答案 0 :(得分:1)

在访问newTextBox之前,您应该检查FirstOrDefault是否为空。如果没有具有指定名称的文本框,则null将返回var name = String.Format("tboxR{0}C{1}B{2}", row, column, box); TextBox newTextBox = (TextBox)Controls.Find(name, false).FirstOrDefault(); if (newTextBox != null) { MessageBox.Show(newTextBox.Text); //... } 作为默认值:

newTextBox

请注意,如果nullnull.Text,那么您无法获取该文字 - NullReferenceException将为您提供var textBox = Controls.OfType<TextBox>().FirstOrDefault(tb => tb.Name == name);

顺便说一句,您可以使用LINQ搜索控件

{{1}}

答案 1 :(得分:1)

而不是newTextBox.Text != ""使用newTextBox != null && newTextBox.Text != ""

答案 2 :(得分:0)

试试这样:

private void Solve(int row, int column, int box)
    {
        string numbers = "123456789";
        TextBox newTextBox = (TextBox)Controls.Find(string.Format("tbox{0}", "R" + row.ToString() + "C" + column.ToString() + "B" + box.ToString()), false).FirstOrDefault();

         if(newTextBox!=null)
         {
             MessageBox.Show(newTextBox.Text);
             return;
         }

        numbers = numbers.Replace(checkRow(row, column), "");
        numbers = numbers.Replace(checkColumn(row, column), "");
        numbers = numbers.Replace(checkBoxPos(row, column), "");

        if (numbers.Length == 1)
         {
            newTextBox.Text = numbers;
         }
    }

在使用之前,您需要检查newTextBox的值。您需要检查newTextBox中的值是否为null