Buttonコントロールのクリックイベントを発生させ、ユーザーによるクリック操作をシミュレートするには、Button.PerformClickメソッドを呼び出します。PerformClickメソッドはMenuItem、RadioButton、ToolStripItemなどのコントロールにもありますので、これらでも同様に使用できます。
ただし、コントロールのCanSelectプロパティがfalseの時は、PerformClickメソッドは何もしません。例えば、コントロールのVisibleプロパティがfalseの時、CanSelectプロパティはfalseとなります。
'Button1のClickイベントを発生させる
Button1.PerformClick()
//Button1のClickイベントを発生させる
Button1.PerformClick();
CanSelectプロパティがfalseでもClickイベントを発生させるには、コントロールのOnClickメソッドを呼び出します。OnClickメソッドはプロテクトメソッドですので、外部クラスからは呼び出すことができません。よって、例えば以下のようにButtonクラスの派生クラスを作成し、使用することにより、OnClickメソッドを呼び出せるようにします。
Public Class MyButton Inherits Button 'Clickイベントを発生させる Public Sub DoClick() Me.OnClick(New EventArgs) End Sub End Class
public class MyButton : Button { //Clickイベントを発生させる public void DoClick() { this.OnClick(new EventArgs()); } }
「隠蔽されている非パブリックメンバを呼び出す」で紹介している方法を使えば、プロテクトメソッドであるDoClickメソッドも外部から呼び出すことができます。しかしこの方法はかなり強引な方法ですので、できれば避けた方が良いです。
この方法によってButton1のOnClickメソッドを呼び出す例を以下に示します。
'リフレクションで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})
//リフレクションで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イベントハンドラの内容をメソッドとして独立させ、そのメソッドを呼び出すようにしてください。