【问题标题】:NullReferenceException when passing Action传递 Action 时出现 NullReferenceException
【发布时间】:2017-08-30 04:22:28
【问题描述】:

我正在尝试将一个公共函数传递给一个新表单以处理一些细节并更新主表单,但我在这一行得到了 NullReferenceException eh.TextBox1.Text = dt.Columns[e.ColumnIndex].ToString();

有趣的是,如果我取出委托(左侧)代码不会崩溃(但显然不起作用),直到我包含委托后才会发生这种情况

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();
        }

【问题讨论】:

    标签: c# visual-studio


    【解决方案1】:

    只有零参数的构造函数正在初始化组件。当您调用传递操作的构造函数时,组件不会被初始化,因此 eh.TextBox1 为空。

    您可以在构造函数的定义中添加一个带有“:this()”的基本调用列表,以使其在action arg构造函数的主体结束后调用零参数构造函数。

    【讨论】:

      【解决方案2】:

      InitializeComponent 未被调用。

      您的构造函数应该如下所示:

      public EditHeader(Action<string> updateHeader)
          : this()
      {
          _UpdateHeader = updateHeader;
      }
      

      【讨论】:

        猜你喜欢
        • 2018-11-06
        • 2021-01-12
        • 1970-01-01
        • 2012-06-25
        • 1970-01-01
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多