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]的值
必须确保在调用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);
}
然而,事件实际上是松耦合的。
如果一切都在你的控制之下,只需直接调用一个方法,把自己从事件中拯救出来。