如何触发我的代码中的按钮单击?

时间:2013-05-28 12:31:49

标签: c# windows-8

如何在我的代码中直接触发按钮点击?

我有这样的代码:

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();

3 个答案:

答案 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);
        }

    }

}