Есть ли способ захватить событие Click для кнопки из родительского элемента управления и предотвратить его возникновение, если переменная внутри родительского элемента управления имеет значение true?
Например:
private void AssignEventOverrides()
{
foreach (Button button in Buttons)
{
// Get the event assigned at design time
var someUnknownEventHandler = GetTheClickHandlerSomehow(button);
// Unsubscribe the unknown event
button.Click -= SomeUnknownEventHandler;
// Assign the intercepting event
button.Click += button_Click;
}
}
private void button_Click(object sender, EventArgs e)
{
if (!preventClick)
{
// Fire the intercepted event that was previously unsubscribed
}
}
Надеюсь, есть лучший способ сделать это, чем приведенный выше пример. Просто чтобы заметить, я не имею никакого контроля над событиями, назначенными на упомянутые кнопки. Они подписаны в другом месте, и мне просто нужно предотвратить их возникновение, если переменная имеет значение true в родительском элементе управления, использующем ресурсы.
Мой реальный сценарий:
Я использую Windows Mobile 6.5 (переписывание устаревших приложений). Я создал панель управления, которая может содержать N дочерних элементов управления. Панель управления позволяет осуществлять вертикальную прокрутку в стиле iPhone. Я подписываюсь на событие MouseMove
дочернего элемента Control
и устанавливаю переменную _isScrolling
в true
. В событии MouseUp
я установил _isScrolling
на false
.
Поскольку Click
происходит до MouseUp
, я могу проверить в событии Click
, чтобы убедиться, что при нажатии кнопки прокрутка не произошла. Таким образом, в основном, если прокручивается моя панель, мне нужно предотвратить запуск события Click (подписанного во время разработки).