5

コードでボタンのクリックを直接トリガーするにはどうすればよいですか?

私はこのようなコードを持っています:

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

4

3 に答える 3

2

イベント (クリック) へのメソッド リンクを削除できます。

MyBtn.Click -= new EventHandler(Button_Click);

そして、他のメソッドを追加します:

MyBtn.Click += new EventHandler(FireClickEvent);

そのため、ボタンをクリックすると、「Button_Click」の代わりに「FireClickEvent」メソッドが呼び出されます。

コード内でクリックを実行するには:

MyBtn.PerformClick();
于 2013-05-28T12:45:58.703 に答える
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);
        }

    }

}
于 2013-05-28T13:20:45.820 に答える