如何在我的代码中直接触发按钮点击?
我有这样的代码:
namespace App1
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// fire a click ebent von the "Button" MyBtn
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// ...
}
}
}
是否可以通过按钮MyBtn
触发点击事件?如果是的话怎么样?
我知道我可以调用Button_Click
方法,但我想通过按钮调用它。
类似于:MyBtn.FireClickEvent();
答案 0 :(得分:10)
您可以按如下方式从代码中触发Button_Click
事件:
MyBtn.PerformClick();
你也可以尝试这个:
MyBtn.Click(new object(), new EventArgs());
答案 1 :(得分:0)
您可以删除指向您的活动的方法链接(点击):
MyBtn.Click -= new EventHandler(Button_Click);
并添加其他方法:
MyBtn.Click += new EventHandler(FireClickEvent);
因此,当您单击该按钮时,将调用方法“FireClickEvent”而不是“Button_Click”。
要在代码中执行点击:
MyBtn.PerformClick();
答案 2 :(得分:0)
我使用这个小扩展来从外部发射事件。 它是一种通用的(可以在任何类中引发任何事件),但我把它作为一种扩展方法来控制,因为这是不好的做法,我真的真的只在其他一切都失败时才使用它。玩得开心。
public static class ControlExtensions
{
public static void SimulateClick(this Control c)
{
c.RaiseEvent("Click", EventArgs.Empty);
}
public static void RaiseEvent(this Control c, string eventName, EventArgs e)
{
// TO simulate the delegate invocation we obtain it's invocation list
// and walk it, invoking each item in the list
Type t = c.GetType();
FieldInfo fi = t.GetField(eventName, BindingFlags.NonPublic | BindingFlags.Instance);
MulticastDelegate d = fi.GetValue(c) as MulticastDelegate;
Delegate[] list = d.GetInvocationList();
// It is important to cast each member to an appropriate delegate type
// For example for the KeyDown event we would replace EventHandler
// with KeyEvenHandler and new EventArgs() with new KeyHandlerEventArgs()
foreach (EventHandler del in list)
{
del.Invoke(c, e);
}
}
}