AspnファイルにbtnTestというボタンがあります。 .csファイルには、ボタンがクリックされたときに呼び出される関数があります。
btnTest_Click(object sender, EventArgs e)
コード内から(つまり、実際にボタンをクリックせずに)この関数を呼び出すにはどうすればよいですか?
btnTest_Click(null, null);
メソッドがこれらのパラメーターのいずれも使用していない場合(そうでないことは非常に一般的です)。
正直言って、これはむずかしいです。呼び出す必要があるコードがある場合は、次の規則に従う必要があります。
protected void btnTest_Click(object sender, EventArgs e)
{
SomeSub();
}
protected void SomeOtherFunctionThatNeedsToCallTheCode()
{
SomeSub();
}
protected void SomeSub()
{
// ...
}
使用する
btnTest_Click( this, new EventArgs() );
イベント関数名を変更する可能性があるため、上記のすべてのメソッドは適切ではありません。最も簡単なのは:
btnTest.PerfromClick();
リフレクションを使用して、クリックイベントハンドラーを起動するOnClick
メソッドを呼び出すことができます。
これを投稿すると汚い気がしますが、うまくいきます...
MethodInfo clickMethodInfo = typeof(Button).GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
clickMethodInfo.Invoke(buttonToInvoke, new object[] { EventArgs.Empty });
メソッドがsender
またはe
のいずれも使用していない場合、couldを呼び出します。
btnTest_Click(null, null);
おそらく検討すべきことは、そのメソッド内から独自のメソッドにコードを抽出することです。このメソッドは、ボタンクリックイベントハンドラーと、機能が必要なコードの他の場所の両方から呼び出すことができます。
これはフォーム上の単なるメソッドであり、他のメソッドと同様に呼び出すことができます。渡すにはEventArgsオブジェクトを作成するだけです(そしてボタンのハンドルをsender
として渡します)
単に呼び出す:
btnTest_Click(null, null);
関数でこれらのパラメーターのいずれかを使用しようとしていないことを確認してください。
最初のボタンイベント内で2番目のbutton(imagebutton)イベントを呼び出します。
imagebutton_Click((ImageButton)this.divXXX.FindControl("imagbutton"), EventArgs.Empty);
何かを保存する場合、imagebuttonのcommandArgumentなどのボタン状態を使用できます。
btnSubmit_Click(btnSubmit,EventArgs.Empty);
.csファイルでボタンイベントハンドラーを呼び出すには、パラメーターsender
およびe
を渡す必要があります
btnTest_Click(sender,e);
btnTest_Click(new object()、EventArgs.Empty)
他の関数と同様に、btnTest_Clickを呼び出すことができます。
最も基本的な形式は次のとおりです。
btnTest_Click(this, null);