c#事件处理委托返回Null

本文关键字:返回 Null 事件处理 | 更新日期: 2023-09-27 17:54:47

当双击网格单元格时,我试图返回一个值。下面是我设置委托和事件处理程序的代码:

   public class SelectedItemEventArgs : EventArgs
    {
        public string SelectedChoice { get; set; }
    }
    public event EventHandler<SelectedItemEventArgs> ItemHasBeenSelected;
下面是我设置双击的代码:
    private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        var handler = ItemHasBeenSelected;
        if (handler != null)
            {
                handler(this, new SelectedItemEventArgs
                { SelectedChoice = txtCustomer.Text.ToString() });
            }
    }

处理程序始终为空。如果我将事件处理程序代码更改为:

    private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        var handler = ItemHasBeenSelected;
        string choice = dataGridView1[0, e.RowIndex].ToString();
        if (choice != null)
        {
            handler(this, new SelectedItemEventArgs
            { SelectedChoice = choice});
        }
   }

我得到错误"Object reference not set to a instance of a Object "。我确实看到了这个:c#委托返回NULL,但我不知道它是如何工作的。我最终希望返回dataGridView1[0, e.RowIndex]的值

c#事件处理委托返回Null

必须确保在调用event之前将method添加到event中。

private void Form1_Load(object sender, EventArgs e)
{
    ItemHasBeenSelected += Form1_ItemHasBeenSelected;
}
private void Form1_ItemHasBeenSelected(object sender, SelectedItemEventArgs e)
{
    MessageBox.Show("Chosen: " + e.SelectedChoice);
}

然而,事件实际上是松耦合的。

如果一切都在你的控制之下,只需直接调用一个方法,把自己从事件中拯救出来。