0

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

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

        private void listApplications_DoubleClick(object sender, EventArgs e) {

“listApplications”是一个列表视图。

我必须传递 listApplications,因为我将 DoubleClick() 事件中的 sender 转换为 ListView。

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

listApplications_DoubleClick(listApplications, e);

在良好的情况下,两种方式都可以正常/相同地工作。我不知道如果有例外情况会不会是这样,虽然......

4

3 回答 3

1

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

这是一个如何使用事件参数来确定双击位置的示例。

于 2012-04-12T16:42:48.237 回答
1

不,除非您不使用 ein 方法 listApplications_DoubleClick(object sender, EventArgs e) body.. 可以发送 null,否则传递 EventArg 并不危险,

于 2012-04-12T16:43:03.010 回答
1

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

例如,现在假设您想在用户单击按钮时调用绘制事件。在这种情况下,点击事件将调用绘制事件。现在的问题是:绘制事件需要一个 PaintEventArgs,因此传递一个 MouseEventArgs 可能会导致异常。当然,如果您可以控制这两段代码,那么您可以自行检查是否可以访问 PaintEventArgs 特定成员。如果没有,那么你很好,尽管在这种情况下我看不出传递参数的意义。

希望这不会太混乱。

于 2012-04-12T17:16:57.857 回答