以编程方式触发控件的事件

问题描述 投票:29回答:8

假设我有一个WinFoms项目。只有一个按钮(例如button1)。

问题是:是否可以通过代码触发ButtonClicked事件而无需真正点击它?

c# winforms events controls
8个回答
41
投票

按钮控件具有您可以调用的PerformClick()方法。

button1.PerformClick();

22
投票

。NET框架使用一种模式,其中对于每个事件X,都有一个方法protected void OnX(EventArgs e) {}引发事件X。参见此Msdn article。要从声明类的外部引发事件,您必须派生该类并添加一个公共包装器方法。对于Button,它看起来像这样:

class MyButton : System.Windows.Forms.Button
{

    public void ProgrammaticClick(EventArgs e)
    {
        base.OnClick(e);
    }

}

15
投票

您可以直接调用事件处理函数,并为发送方指定null,为参数指定EventArgs.Empty

void ButtonClicked(object sender, EventArgs e)
{
    // do stuff
}

// Somewhere else in your code:
button1.Click += new EventHandler(ButtonClicked);

// call the event handler directly:
ButtonClicked(button1, EventArgs.Empty);

或者,相反,您将逻辑从ButtonClicked事件移到其自己的函数中,然后事件处理程序和您拥有的其他代码将依次调用新函数。

void StuffThatHappensOnButtonClick()
{
    // do stuff
}

void ButtonClicked(object sender, EventArgs e)
{
    StuffThatHappensOnButtonClick();
}

// Somewhere else in your code:
button1.Click += new EventHandler(ButtonClicked);

// Simulate the button click:
StuffThatHappensOnButtonClick();

后一种方法的优点是可以使您的业务逻辑和UI逻辑分离。您的控件事件处理程序中绝对不应包含任何业务逻辑。


6
投票

是的,只需像调用其他方法一样调用该方法。例如:

    private void btnSayHello_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Hello World!");
    }

    private void btnTriggerHello_Click(object sender, EventArgs e)
    {
        btnSayHello_Click(null, null);
    }

4
投票
button1.PerformClick();

但是如果您必须执行类似操作,最好将事件下的代码移到新方法上?


3
投票

为什么不将事件代码放入方法中?然后让Event执行该方法。这样,如果您需要执行事件引发的相同代码,则可以,但只需调用“方法”即可。

void Event_Method()
{
    //Put Event code here.
    MessageBox.Show("Hello!");
}

void _btnSend_Click(object sender, EventArgs e)
{
    Event_Method();
}

void AnotherMethod()
{
    Event_Method();
}

有道理吗?现在,“ Click”事件以及代码中的任何位置都可以触发与“ Click”事件相同的代码。

不触发事件,请调用事件调用的方法。 ;)


0
投票

在大多数情况下,您不需要这样做。只需将您的功能包装在与特定目的(任务)相关的功能中。您可以在事件内部以及其他需要的地方调用此函数。

仔细考虑您的方法。


-2
投票

使用for循环调用button_click事件

private void btnadd_Click(object sender, RoutedEventArgs e)
{ 
    for (int i = 0; i <= 2; i++)
        StuffThatHappensOnButtonClick(); 
}


void StuffThatHappensOnButtonClick()
{
    ........do stuff
}

我们假设您至少需要一次单击按钮

© www.soinside.com 2019 - 2024. All rights reserved.