C# 对象引用未设置为对象的实例
我有一个创建运行时文本框的函数:C# 对象引用未设置为对象的实例,c#,.net,nullreferenceexception,C#,.net,Nullreferenceexception,我有一个创建运行时文本框的函数: int i = 0; private TextBox[] addressBox = new TextBox[100]; private void appendNewTab() { addressBox[i] = new TextBox(); addressBox[i].KeyPress += new KeyPressEventHandler(this.addressBox_KeyPress); i++; } vo
int i = 0;
private TextBox[] addressBox = new TextBox[100];
private void appendNewTab()
{
addressBox[i] = new TextBox();
addressBox[i].KeyPress +=
new KeyPressEventHandler(this.addressBox_KeyPress);
i++;
}
void addressBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)13)
{
MessageBox.Show(addressBox[i].Text);
}
}
但我这里没有将对象引用设置为对象的实例
MessageBox.Show(addressBox[i].Text);
有什么建议吗?地址框[i]为空或地址框[i]。文本为空。在调试器中运行它以查找。地址框[i]为null或地址框[i]。文本为null。在调试器中运行它以找到答案。您的问题是,在最新文本框上设置事件处理程序后,i会递增,以指向数组中具有空值的位置,但尚未为其构造文本框 通常,您可以使用闭包来解决此问题,但在这种特定情况下,事件系统会向您提供一个文本框,其中按键被放在一个银盘中:它是发送者
您的问题是,在最新文本框上设置事件处理程序后,i会递增,以指向数组中具有空值的位置,但尚未为其构造文本框 通常,您可以使用闭包来解决此问题,但在这种特定情况下,事件系统会向您提供一个文本框,其中按键被放在一个银盘中:它是发送者
在创建了一个文本框之后,您将增加i;所以,是的,您应该得到一个对象引用错误 想想这个 如果输入appendNewTab函数,i为0 该函数在addressBox[0]的数组中创建一个文本框 然后立即将i增加到1 当调用按键时,它会测试地址框[1]。这是空的 如果已调用appendNewTab 100次,则addressBox[0]到addressBox[99]将具有有效的textbox控件。但是,我将设置为100 在这一点上,当访问addressBox[i]时,您应该会收到索引越界异常 有两种方法可以解决这个问题。第一种是更改按键代码,将发送者转换为文本框,并使用其文本功能。比如:
MessageBox.Show((sender as TextBox).Text);
一种可选方式,如果出于某种奇怪的原因,您想弹出一个消息框,显示您在任何文本框中按enter键时创建的上一个文本框的文本,则您可以使用:
MessageBox.Show(addressBox[i-1].Text);
然而,我真的不认为这是你想要的行为。好吧,你在创建一个文本框之后增加了I;所以,是的,您应该得到一个对象引用错误 想想这个 如果输入appendNewTab函数,i为0 该函数在addressBox[0]的数组中创建一个文本框 然后立即将i增加到1 当调用按键时,它会测试地址框[1]。这是空的 如果已调用appendNewTab 100次,则addressBox[0]到addressBox[99]将具有有效的textbox控件。但是,我将设置为100 在这一点上,当访问addressBox[i]时,您应该会收到索引越界异常 有两种方法可以解决这个问题。第一种是更改按键代码,将发送者转换为文本框,并使用其文本功能。比如:
MessageBox.Show((sender as TextBox).Text);
一种可选方式,如果出于某种奇怪的原因,您想弹出一个消息框,显示您在任何文本框中按enter键时创建的上一个文本框的文本,则您可以使用:
MessageBox.Show(addressBox[i-1].Text);
然而,我真的不认为这是你想要的行为。+1。遗憾的是,许多人盲目地忽略了事件处理程序的发送者参数:@Martinho:我想这在初学者中可能很常见,因为表面上它只是一个对象。+1。遗憾的是,许多人盲目地忽略了事件处理程序的发送者参数:@Martinho:我想这在初学者中很常见,因为表面上它只是一个对象。