我正在尝试将公共函数传递给新表单以处理一些细节并更新主表单,但是我在此行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/

10-10 21:40