C # объединяет 2 события в одном методе - PullRequest
5 голосов
/ 07 августа 2009

Я относительно новичок в программировании, как вы скоро увидите ...
У меня есть 2 события, которые выполняют один и тот же код. В настоящее время у меня есть следующий псевдокод для просмотра данных:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e)  
{
   string abc = "abc";
}

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)  
{
   string abc = "abc";
}

Есть ли способ объединить это в одно событие? Есть ли лучший способ сделать это?

Ответы [ 5 ]

7 голосов
/ 07 августа 2009

Почему бы просто не иметь один метод и сопоставить его с двумя событиями?

private void dgv_CellEvent(object sender, DataGridViewCellEventArgs e)
{
    string abc = "123";
}

// In the event mapping

dgv.CellEnter += dgv_CellEvent;
dgv.CellClick += dgv_CellEvent;
6 голосов
/ 07 августа 2009

Ну, быстрый ответ - да. Поместите кишки методов в его собственный метод, а затем просто вызовите событие onclick, вызывающее этот метод. Это даст вам только одно место для обновления кода в случае необходимости его изменения.

Есть 100 различных способов сделать это, и это, вероятно, самый простой.

Итак, создайте что-то вроде этого:

protected void MyNewMethod()
{
    string abc = "123";
}

и тогда другие ваши методы будут вызывать его так:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e)
{ 
    MyNewMethod(); 
}

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{ 
    MyNewMethod(); 
}

Вариант 2

Просто вызовите тот же метод из разметки. Вам действительно нужен только один из этих методов, и событие в разметке может вызывать тот же самый.

2 голосов
/ 07 августа 2009

В окне свойств (с помощью C # Express) вы можете выбрать обработчики событий в раскрывающемся списке или вручную ввести имя метода. Подпись просто должна совпадать. Я предполагаю, что это то же самое в VS.

1 голос
/ 07 августа 2009

Вы можете попробовать следующее:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    string abc = "abc";
}

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{
    dgv_CellEnter(sender, e);
}

Таким образом, когда вы нажимаете или нажимаете Enter, он запускает тот же метод.

Спасибо

1 голос
/ 07 августа 2009

Самый простой способ сделать это:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e)
{ 
    dgv_CellClick(sender, e); 
}

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{ 
    string abc = "abc"; 
}

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

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

Если бы вы программировали на VB.NET вместо C #, вы могли бы просто написать один метод и использовать ключевое слово Handles, чтобы сказать, что этот метод обрабатывает оба события.

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