Добавление Application.EnableEvents = False
в начале кода, а затем возврат к истине поможет, также использование Applciation.ScreenUpdating = False
также поможет.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim L As Long
Dim r As Range
Application.EnableEvents = False
Application.ScreenUpdating = False
L = Cells(Rows.Count, "R").End(xlUp).Row
If Not Intersect(Target, Range("C4")) Is Nothing Then
For Each r In Range("R2:R" & L)
If r.Value = "Y" Then
Rows(r.Row).Hidden = True
Else
Rows(r.Row).Hidden = False
End If
Next
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Если все, что Вы делаете, запускает обработчик событий из другого обработчика событий, можно отключить среднего человека и сцепить обработчики событий непосредственно в добавить/удалить блоках для события.
, Например, если у Вас есть UserControl с событием "SaveButtonClick" и всем, которое Вы хотите сделать, когда вызов обработчик событий, когда "SaveButton" на Вашем UserControl нажат, можно сделать это:
public event EventHandler SaveButtonClick
{
add { this.SaveButton.Click += value; }
remove { this.SaveButton.Click -= value; }
}
Теперь Вам не нужен никакой код для увольнения события SaveButtonClick - это будет автоматически запущено когда SaveButton. Событие щелчка генерируется (т.е. когда кто-то нажимает ту кнопку).
Peter Rilling отправил способ моделировать Распространение событий / Широковещательно передающий в winforms. Это просто и эффективно.
Имейте чтение блога Jeremy Miller "Разработчик Тенистого дерева", особенно его серия Write Your Own CAB - материал шаблона "команда" он говорит о существует, вероятно, в чем Вы нуждаетесь.
Если я не вижу немного больше дизайна.. будет трудно дать хороший ответ.
WPF приводит в порядок пузырьковые события (автоматически) дерево Компонента/Управления UI..., это было теперь встроено в платформу. Таким образом, я предполагаю, что это - рекомендуемый путь:)
проблема обойти среднего человека Layer2 - то, что Layer1 и Layer3 теперь знают друг друга... связаны. Таким образом, это - компромисс.. если Вы хорошо со связью.. устраните среднего человека / изобретают специализированный компонент с этой ответственностью. Однако, если бы Вы ожидаете, что Уровень 3 будет заменяем в горячем режиме (слабая связь), я сказал бы, продолжают пузыриться.
У Вас может быть центральный канал та единственная поддержка события. Этот канал должен быть независимым, таким образом, слой только публикует или подписывается на него.
Смотрите на .NET Средств управления Обновлением . Эти средства управления обнаруживают части Вашей модели данных, что они зависят от даже через слои бизнес-логики. Вы не должны писать никакой код для уведомления их.