0

我怎么能在没有实际发生的情况下执行一个事件?

例如,如何button1_Click()在不单击按钮的情况下在代码中执行事件?

问题是我有一个WebClient,它下载文件列表。每次完成下载文件时,它都会执行一个DownloadFileCompleted事件,然后下载下一个文件。

但是,某些文件没有下载(全部在计划中),因此没有执行该事件。我怎么能执行它?谢谢

4

6 回答 6

7

只需将事件处理程序中存在的所有代码插入一个单独的函数中,例如

private void button1_click(...)
{
    func(...)
}


public void func(...)
{
    //even handler code
}

如果你不知道要引发什么事件,或者不能,只需调用

func(...)

我个人反对显式调用事件处理程序,但更喜欢这种方法。对我来说似乎更清晰的代码结构。

于 2012-05-30T11:07:42.137 回答
1

控件通常具有引发事件的能力,例如Button.PerformClick在您的情况下

于 2012-05-30T11:07:46.113 回答
1

您可以只给它提供空值并像普通函数一样调用它(毕竟,它是一个普通函数,只需要一个发送者和适当的事件参数)。例如

button_click(new object(), new System.EventArgs());

这些是标准 GUI 按钮的正常事件,您的按钮可能需要不同的事件。如果您只需要您的按钮来检测点击并且不想使用事件参数,则此方法有效。

于 2012-05-30T11:07:01.283 回答
0

button1_Click() 只是一个方法,因此即使将其绑定到事件也可以执行它。

于 2012-05-30T11:07:23.447 回答
0

您应该将代码从事件处理程序中移出并放入函数中。

然后,您可以从事件和您需要触发它的任何其他方法调用此函数。

所以而不是:

private void button1_Click()
{
    //do something
}

你有:

private void button1_Click()
{
    doSomething();
}

public void doSomething()
{
    //do something
}
于 2012-05-30T11:09:05.193 回答
0

如果您的 Button 的名称是button1,您可以通过以下代码行引发点击事件:

button1.PerformClick();

希望这可以帮助!

编辑:

或者像其他人说的那样,将您的逻辑放在一个单独的方法中,并在需要时调用该方法。

于 2012-05-30T11:10:40.950 回答