假设我有一个WinFoms项目。只有一个按钮(例如button1
)。
问题是:是否有可能在不真正单击的情况下通过代码触发ButtonClicked
事件?
发布于 2012-08-30 02:52:36
按钮控件有一个可以调用的PerformClick()方法。
button1.PerformClick();
发布于 2012-08-30 03:59:05
.NET框架使用了这样一种模式:对于每个事件X
,都有一个引发事件X
的方法protected void OnX(EventArgs e) {}
。请参阅此Msdn article。要从声明类的外部引发事件,您必须派生该类并添加一个公共包装方法。在Button
的情况下,它将如下所示:
class MyButton : System.Windows.Forms.Button
{
public void ProgrammaticClick(EventArgs e)
{
base.OnClick(e);
}
}
发布于 2012-08-30 02:52:46
您可以直接调用事件处理函数,并为发送方指定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逻辑分开。你真的不应该在你的控件事件处理程序中有任何业务逻辑。
https://stackoverflow.com/questions/12184614
复制相似问题