DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

Buttonのクリックイベントを発生させる

PerformClickメソッドを呼び出す方法

Buttonコントロールのクリックイベントを発生させ、ユーザーによるクリック操作をシミュレートするには、Button.PerformClickメソッドを呼び出します。PerformClickメソッドはMenuItem、RadioButton、ToolStripItemなどのコントロールにもありますので、これらでも同様に使用できます。

ただし、コントロールのCanSelectプロパティがfalseの時は、PerformClickメソッドは何もしません。例えば、コントロールのVisibleプロパティがfalseの時、CanSelectプロパティはfalseとなります。

VB.NET
コードを隠すコードを選択
'Button1のClickイベントを発生させる
Button1.PerformClick()
C#
コードを隠すコードを選択
//Button1のClickイベントを発生させる
Button1.PerformClick();

OnClickメソッドを呼び出す方法

CanSelectプロパティがfalseでもClickイベントを発生させるには、コントロールのOnClickメソッドを呼び出します。OnClickメソッドはプロテクトメソッドですので、外部クラスからは呼び出すことができません。よって、例えば以下のようにButtonクラスの派生クラスを作成し、使用することにより、OnClickメソッドを呼び出せるようにします。

VB.NET
コードを隠すコードを選択
Public Class MyButton
    Inherits Button

    'Clickイベントを発生させる
    Public Sub DoClick()
        Me.OnClick(New EventArgs)
    End Sub
End Class
C#
コードを隠すコードを選択
public class MyButton : Button
{
    //Clickイベントを発生させる
    public void DoClick()
    {
        this.OnClick(new EventArgs());
    }
}

リフレクションを使用して、DoClickメソッドを呼び出す

隠蔽されている非パブリックメンバを呼び出す」で紹介している方法を使えば、プロテクトメソッドであるDoClickメソッドも外部から呼び出すことができます。しかしこの方法はかなり強引な方法ですので、できれば避けた方が良いです。

この方法によってButton1のOnClickメソッドを呼び出す例を以下に示します。

VB.NET
コードを隠すコードを選択
'リフレクションでButton1のOnClickメソッドを呼び出す
Button1.GetType().InvokeMember("OnClick", _
    System.Reflection.BindingFlags.InvokeMethod Or _
    System.Reflection.BindingFlags.NonPublic Or _
    System.Reflection.BindingFlags.Instance, _
    Nothing, _
    Button1, _
    New Object() {EventArgs.Empty})
C#
コードを隠すコードを選択
//リフレクションでButton1のOnClickメソッドを呼び出す
Button1.GetType().InvokeMember("OnClick",
    System.Reflection.BindingFlags.InvokeMethod |
    System.Reflection.BindingFlags.NonPublic |
    System.Reflection.BindingFlags.Instance,
    null,
    Button1,
    new object[] { EventArgs.Empty });
注意:ButtonのClickイベントハンドラを呼び出す目的だけでこれらの方法を使用すべきではありません。そのようなケースでは、Clickイベントハンドラの内容をメソッドとして独立させ、そのメソッドを呼び出すようにしてください。
  • 履歴:
  • 2015/11/6 リフレクションを使用してDoClickメソッドを呼び出す方法を追加。(コメントでご提案いただきました。)

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。