2012-04-11 3 views
0

C# WinForms: Когда я вызываю метод() от TabPages Ясно:Предотвращение метод SelectedIndexChanged() вызывается, когда мы называем TabPages.Clear()

tabControl.TabPages.Clear(); 

это также стрельба SelectedIndexChanged событие

tabControl_SelectedIndexChanged 

. Но я не хочу этого. Есть ли формальный или даже хакерский способ предотвратить это, когда я вызываю Clear()? Я все еще хочу, чтобы он вызывался всякий раз, когда пользователь нажимает на вкладку, но я просто не хочу, чтобы он автоматически вызывался, когда в другом месте я вызываю метод Clear().

спасибо.

+1

Быстрое исправление: Отцепите обработчик событий, очистите страницы вкладок, Подцепите обработчик событий снова. –

+0

Спасибо. Вы можете опубликовать его в качестве ответа. Он работал :) – Bohn

ответ

2

В дополнении к замечанию я сделал вы могли бы сделать его метод расширения:

public static void ClearAllTabPages(this TabControl tc, EventHandler eh) 
{ 
    tc.SelectedIndexChanged -= eh; 
    tc.TabPages.Clear(); 
    tc.SelectedIndexChanged += eh; 
} 

Теперь вам не нужно не забудьте отцепить и перехватить обработчик событий во всех местах, где вы хотите очистить вкладки. Вы просто звоните:

tabControl.ClearAllTabPages(tabControl_SelectedIndexChanged); 

Примечание:
Я havn't пробовал этот код, но он должен работать.

+0

У этого есть проблема, если есть ошибка в тогда мы потеряем наш обработчик событий. – Dhananjay

+0

@Dhananjay: Конечно, всегда следует выполнять правильную обработку ошибок. При переполнении стека мы обычно опускаем обработку ошибок для ясности. –

+0

правда, но серьезность удара более желательна, чтобы добавить эту точку. – Dhananjay

2

Как прокомментировал Sani, это простая работа вокруг:

tabControl.SelectedIndexChanged -= tabControl_SelectedIndexChanged; 
tabControl.TabPages.Clear(); 
tabControl.SelectedIndexChanged += tabControl_SelectedIndexChanged; 
+0

У этого есть проблема, если в тогда мы потеряем наш обработчик событий. – Dhananjay

Смежные вопросы