2012-03-01 10 views
0

これは、それはその引数から必要なすべてがいるEventArgsそれから、スプレッドの行と列を得ることができるので、イベントへの直接の呼び出しを避けるにはどうすればよいですか?

private void sshResults_ButtonClicked(object eventSender, EditorNotifyEventArgs eventArgs) 

が、消費者はこのようにそれを呼び出していることで、私たちが処理したい方法です。

this.sshResults_ButtonClicked(null, new EditorNotifyEventArgs(new SpreadView(), null, Row - 1,Column - 1)); 

私はそれをこのようにしたくありません。行と列を渡すだけのリソースです。 これを書き直す良い方法は何ですか?たぶん私は別のメソッドを作成することができますコピー、それの最初のメソッドの全身をコピーし、それに行と列を渡すだけですか?それはコードの冗長性を引き起こしますか?私たちはsshResults_ButtonClickedを使用している500の場所がありますが、私は上記のものを変更したいので、sshResults_ButtonClickedも取り除きたくありません。

答えて

4

sshResults_ButtonClickedの適切な部分を独自のメソッドにリファクタリングし、その代わりにというイベントハンドラと呼び出し先の両方からを呼び出します。

1

次の方法で宣言します。とにかく、私はあなたがイベントハンドラを呼び出す必要はないと思う InvokeEvent(this.YourEventName, Row, Col);

- それは次のようになります。

private void InvokeEvent(EventHandler<EditorNotifyEventArgs> eventHandler, int row, int column) 
{ 
    if (eventHandler != null) 
    eventHandler(null, new EditorNotifyEventArgs(new SpreadView(), null, row - 1,column - 1)); 
} 

そして、イベントを発生させる必要がある場合、それを呼び出しをイベントが発生したときに呼び出されます。代わりにイベントを発生させたいとします。

+0

ありがとうございますが、私の目標は、新しいEditorNotifyEventArgs(新しいSpreadView()の部分をまったく使用しないことです)。 – Bohn

+1

は答えに多くの説明を追加しました:) –

関連する問題