C# 在事件处理程序周围传递EventArg是否有潜在危险?

C# 在事件处理程序周围传递EventArg是否有潜在危险?,c#,winforms,listview,event-handling,contextmenustrip,C#,Winforms,Listview,Event Handling,Contextmenustrip,我正在从另一个事件处理程序调用事件处理程序: private void launchApplicationToolStripMenuItem_Click(object sender, EventArgs e) { listApplications_DoubleClick(listApplications, null); } private void listApplications_DoubleClick(object sender,

我正在从另一个事件处理程序调用事件处理程序:

private void launchApplicationToolStripMenuItem_Click(object sender, EventArgs e) {
            listApplications_DoubleClick(listApplications, null); 
        }

        private void listApplications_DoubleClick(object sender, EventArgs e) {
“listApplications”是一个ListView

我必须传递listApplications,因为我将DoubleClick()事件中的发送者强制转换为ListView

但是第二个arg呢?我应该传递null,如上所示,还是像这样传递“e”:


在良好的环境下,两种方法都能很好地/完全相同地工作。我不知道如果出现异常,是否会出现这种情况,但是…

当您调用相同事件的事件处理程序时(即,当您从另一个双击事件调用双击事件时),应该将事件参数传递给它。事件参数包含有关双击的重要信息,例如双击的位置。如果处理程序“链下”不关心这些参数,则传递
null
不会导致问题;但是,您不应该假设正在调用的处理程序忽略参数,并向其传递有效的内容


以下是如何使用事件参数来确定双击的位置。

当您调用相同事件的事件处理程序时(即,当您从另一个双击事件调用双击事件时),您应该将事件参数传递给它。事件参数包含有关双击的重要信息,例如双击的位置。如果处理程序“链下”不关心这些参数,则传递
null
不会导致问题;但是,您不应该假设正在调用的处理程序忽略参数,并向其传递有效的内容


下面介绍如何使用事件参数来确定双击的位置。

不,传递EventArg并不危险
除非您不使用ein方法listApplications\u双击(对象发送方,EventArgs e)body。。可以发送null,

否,传递EventArg并不危险
除非您不使用ein方法listApplications\u双击(对象发送方,EventArgs e)body。。发送null是可以的,

好吧,我不能确切地说是危险的,但它可能会导致一些问题,例如如果处理不当,就会出现异常。在您的示例中,一个事件是click事件,另一个是双击事件,这意味着EventArgs对象e实际上都是MouseEventArgs。这很好,因为您不必担心第二个事件处理程序访问不存在的e

现在,假设您希望在用户单击按钮时调用paint事件。在这种情况下,单击事件将调用绘制事件。现在的问题是:paint事件需要一个PaintEventArgs,因此传递一个MouseeEventArgs可能会导致异常。当然,如果您控制这两段代码,那么您可以自己检查是否有权访问PaintEventArgs特定的成员。如果没有,那么你很好,尽管我不认为在这个场景中传递args有什么意义


希望这不会太让人困惑。

好吧,我不想确切地说是危险的,但它可能会导致一些问题,例如如果处理不当会出现异常。在您的示例中,一个事件是click事件,另一个是双击事件,这意味着EventArgs对象e实际上都是MouseEventArgs。这很好,因为您不必担心第二个事件处理程序访问不存在的e

现在,假设您希望在用户单击按钮时调用paint事件。在这种情况下,单击事件将调用绘制事件。现在的问题是:paint事件需要一个PaintEventArgs,因此传递一个MouseeEventArgs可能会导致异常。当然,如果您控制这两段代码,那么您可以自己检查是否有权访问PaintEventArgs特定的成员。如果没有,那么你很好,尽管我不认为在这个场景中传递args有什么意义


希望这不会太让人困惑。

我可以建议创建第三个方法,该方法的名称描述实际发生的情况,然后让每个事件处理程序调用它吗?这将使代码更加清晰。我是否可以建议创建第三个方法,该方法的名称描述实际发生的情况,然后让每个事件处理程序调用它?这将使代码更加清晰。
listApplications_DoubleClick(listApplications, e);