我正在尝试将公共函数传递给新表单以处理一些细节并更新主表单,但是我在此行eh.TextBox1.Text = dt.Columns[e.ColumnIndex].ToString();
上获取了NullReferenceException
有趣的是,直到我包括委托人(如果我取出委托人(左侧))代码都不会崩溃(但显然不起作用)之后,它才会发生EditHeader eh = new EditHeader();
-> EditHeader eh = new EditHeader(this.UpdateHeader);
这是form1的相关代码
private void OnColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
EditHeader eh = new EditHeader(this.UpdateHeader);
eh.TextBox1.Text = dt.Columns[e.ColumnIndex].ToString();
eh.TextBox2.Text = e.ColumnIndex.ToString();
eh.Show();
}
private void UpdateHeader(string indexVal) {
string[] array = indexVal.Split(',');
int index = int.Parse(array[0]);
dt.Columns[index].ColumnName = array[1];
}
这是EditHeader(或form2)
private readonly Action<string> _UpdateHeader;
public EditHeader() {
InitializeComponent();
}
private void EditHeader_Load(object sender, EventArgs e) {
}
public EditHeader(Action<string> updateHeader) {
_UpdateHeader = updateHeader;
}
public TextBox TextBox1 {
get {
return textBox1;
}
set {
}
}
public TextBox TextBox2 {
get {
return textBox2;
}
set {
}
}
private void button1_Click(object sender, EventArgs e) {
int index = int.Parse(textBox2.Text);
string indexVal = index.ToString() + "," + textBox1.Text;
_UpdateHeader(indexVal);
this.Close();
}
最佳答案
只有zero-arg构造函数正在初始化组件。当您调用构造函数传递操作时,不会初始化组件,因此eh.TextBox1为null。
您可以在构造函数的定义中添加带有“:this()”的基本调用列表,以使其在操作arg构造函数的主体结束后调用零参数构造函数。
关于c# - 传递Action时发生NullReferenceException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45947652/