首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >以编程方式触发控件的事件

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

Stack Overflow用户
提问于 2012-08-30 02:50:12
回答 9查看 98.1K关注 0票数 36

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

问题是:是否有可能在不真正单击的情况下通过代码触发ButtonClicked事件?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-08-30 02:52:36

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

代码语言:javascript
复制
button1.PerformClick();
票数 46
EN

Stack Overflow用户

发布于 2012-08-30 03:59:05

.NET框架使用了这样一种模式:对于每个事件X,都有一个引发事件X的方法protected void OnX(EventArgs e) {}。请参阅此Msdn article。要从声明类的外部引发事件,您必须派生该类并添加一个公共包装方法。在Button的情况下,它将如下所示:

代码语言:javascript
复制
class MyButton : System.Windows.Forms.Button
{

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

}
票数 25
EN

Stack Overflow用户

发布于 2012-08-30 02:52:46

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

代码语言:javascript
复制
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事件移到它自己的函数中,然后您的事件处理程序和您拥有的其他代码将反过来调用新函数。

代码语言:javascript
复制
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逻辑分开。你真的不应该在你的控件事件处理程序中有任何业务逻辑。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12184614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档