Повторное использование сетки данных (отмена регистрации событий) - PullRequest
1 голос
/ 15 января 2012

У меня возникли некоторые проблемы с сбросом обработчиков событий в мои таблицы данных в проекте, над которым я работаю.

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

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

Я устанавливаю значения в сетке данных программно

Вот как я добавляю события cellclick:

for (int i = 0 ; i < dgList.Count ; i++) //dgList is list of datagridviews
{
    int numberForEvent = i; //i is datagrid nr i

    dgList[i].CellClick += ((sender, e) =>
    {
         alterValueClick(numberForEvent, e.RowIndex);
    });
}

Он работает нормально при первом использовании моей программы, но еслиЯ сбрасываю сетки данных для нового сеанса тестирования, события регистрируются дважды и т. Д.

У кого-нибудь есть идеи о том, как очистить события, или я ошибаюсь в своем дизайне?

1 Ответ

2 голосов
/ 15 января 2012

по сбросу я имею в виду перебирать сетки данных и использовать .rows.clear и .columns.clear

Очистка строк и столбцов не отменяет регистрацию события. У вас есть два варианта

- either re-initialize DataGrid and re-register the event 

- un-register previous event and re-register new one.

Кстати, а зачем вам нужно сбрасывать событие? почему бы не использовать уже зарегистрированные события?

Редактировать

Я не думаю, что вы можете отменить регистрацию события click здесь из-за того, как вы его объявляете. Это анонимный метод, он не будет незарегистрирован, как этот

попробуйте назначить обработчику событий твердотельный метод, и он должен работать

//for registering
dgList[i].CellClick += new DataGridViewCellEventHandler(YourMethod);

//for unregistering
dgList[i].CellClick -= new DataGridViewCellEventHandler(YourMethod);

Тогда, как вы регистрируете внутри цикла for, запустите цикл for для отмены регистрации.

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