传递Action

时间:2017-08-29 20:13:01

标签: c# visual-studio

我正在尝试将一个公共函数传递给一个新表单来处理一些细节并更新主表单但是我在这一行得到了一个N​​ullReferenceException 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();
        }

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

InitializeComponent未被调用。

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

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