我正在调用另一个事件处理程序:
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”:
listApplications_DoubleClick(listApplications, e);
在良好的环境下,这两种方式都可以正常/完全相同。我不知道是否会出现异常情况,但是......
答案 0 :(得分:1)
当您调用相同事件的事件处理程序时(即,当您从另一个双击事件调用doubleclick事件时),您应该将事件参数传递给它。事件参数包含有关双击的重要信息,例如,其位置。如果处理程序“在链中”不关心这些参数,则传递null
不会导致问题;但是,您不应该假设您正在调用的处理程序忽略该参数,并将有效的内容传递给它。
以下是an example如何使用事件参数来计算双击的位置。
答案 1 :(得分:1)
不,传递EventArg并不危险 除非你没有使用ein方法listApplications_DoubleClick(对象发送者,EventArgs e)正文..发送null是好的,
答案 2 :(得分:1)
好吧,我不会说危险,但它可能会导致一些问题,例如如果处理不当则会出现异常。在您的示例中,一个事件是单击事件,另一个是双击事件,这意味着EventArgs对象e实际上都是MouseEventArgs。哪个好,因此你不必担心第二个事件处理程序访问e。
的不存在的成员现在假设您想在用户点击某个按钮时调用paint事件。在这种情况下,click事件将调用paint事件。现在问题是:paint事件需要一个PaintEventArgs,因此传递MouseEventArgs可能会导致异常。当然,如果您控制了两段代码,那么您可以自行检查是否可以访问PaintEventArgs特定成员。如果没有,那么你很好,虽然我没有看到在这种情况下传递args的意义。
希望不要太困惑。