Как избежать прямого звонка на событие? - PullRequest
0 голосов
/ 02 марта 2012

это метод, который мы хотим обработать, все, что ему нужно из его аргументов, - это eventArgs, чтобы он мог получить из него строку и столбец спреда

private void sshResults_ButtonClicked(object eventSender, EditorNotifyEventArgs eventArgs)

но потребитель называет это так:

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

Я не хочу так называть это, слишком много ресурсов, чтобы просто пропустить строку и столбец. Какой хороший способ переписать это? Может быть, я могу создать другой метод, скопировать и вставить в него все тело первого метода и просто передать ему строку и столбец? тогда это вызывает избыточность кода? Примерно в 500 местах мы используем sshResults_ButtonClicked, но я просто хочу изменить упомянутое выше, поэтому я не хочу избавляться и от sshResults_ButtonClicked.

Ответы [ 2 ]

4 голосов
/ 02 марта 2012

Преобразуйте соответствующую часть sshResults_ButtonClicked в свой собственный метод и вызовите ее вместо как из обработчика события, так и из того места, где вы хотите вызвать его явно .

1 голос
/ 02 марта 2012

Объявите следующий метод:

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

И звоните, когда нужно вызвать событие: InvokeEvent(this.YourEventName, Row, Col);

В любом случае, я не думаю, что вам нужно вызывать обработчик событий - он будет вызываться при возникновении события. Вы хотите поднять событие вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...