2009-08-12 19 views
1

プログラムでASP.NETコントロールイベントを発生させる適切な方法は何ですか? 私は少しのコードをリファクタリングしたいと思っています。このようにコード化されたコードの中にアイテムを振りかざしています。開発者はイベントハンドラを呼び出してparamsで飽和させています。 RadioButtonListのASP.NETコントロールイベントをプログラム的に起動する適切な方法は何ですか?

rblAction.SelectedIndex = 0; 
rblActionType_SelectedIndexChanged(null, new EventArgs()); 

ためのDropDownList

ddlAddress.SelectedIndex = 1; 
ddlAddress_SelectedIndexChanged(null, new EventArgs()); 

& ため は、この通常のコーディング慣行ですか?ページを中断したり中断したりしないために私は何をすべきですか? ご意見やご提案をいただければ幸いです。サンディエゴの

おかげで、 〜CK

答えて

5

私は、実際のイベントのメソッドからすべてのコードを削除することによって起動し、新しいAddressChangedと呼ばれる方法または任意の他、あなたの命名基準に適合にそれをリファクタリングします。コード内のどこからでもその新しい関数を呼び出すことができます。あなたがプログラム的にイベントハンドラを呼んでいる

protected void ddlAddress_SelectedIndexChanged(object sender, EventArgs e){ 
    AddressChanged(); 
} 
private void AddressChanged(){ 
    //do the changed event 
} 

private void doingSomething(){ 
    ddlAddress.SelectedIndex = 1; 
    AddressChanged(); 
} 
+0

+1これは私よりもはるかに優れています。うまくやった! –

+0

@Andrew:笑、ありがとう... – RSolberg

0

注意、ないイベント。

これは、通常、イベントハンドラが特定の順序で実行するために互いに頼ってはならないため、設計上の問題を示す可能性があります。しかし、私はこのパターンを見ており、あるイベントハンドラに存在するコードを別のイベントハンドラで実行する必要があり、その時にリファクタリングできなかったときに、時にはこのメソッドを使用しました。 "送付者"を設定して、予期されるコントロール自体からではなく、コードのどこかから来ていることを示すことができますが、これは良いデザインと呼ばれるにはあまりにも不透明です。

共有する必要のあるコードをリファクタリングしてプライベートメソッドに入れ、両方のイベントハンドラに送信者のデータまたは必要なeventargsを渡してもらうことをお勧めします。

関連する問題