2015-01-23 2 views
0

У меня есть форма пользователя, которая содержит объект TextBox с именем myTextBox.Остановка события «TextBox_Change» от выполнения, если вызывается по коду

текст внутри объекта может быть изменен либо пользователем или по коду. Там в процедуры «OnChange», присоединенные в текстовое поле:

Private Sub myTextBox_Change() 
    'do some stuffs 
End Sub 

Я хотел бы событие для обработки только тогда, когда это пользователь изменения текста, но не код. Я думал о добавлении Необязательный параметр, как в следующем:

Private Sub myTextBox_Change(Optional isCode As Boolean) 
    If isCode = False Then 
     'do some stuffs 
    End If 
End Sub 

, но это не очень полезно, потому что я не могу передать isCode = True при изменении названия программно, например:

myForm.myTextBox = "new text" 

Кто-нибудь есть идея о том, как я могу это исправить?

ответ

1

Один из способов (возможно, неправильный путь?) - объявить глобальную переменную, используемую так же, как и ваш IsCode Boolean. Установите его в true во время вашего кода, чтобы событие textbox_change узнало, что код обрабатывается в фоновом режиме, а затем возвращается к false, когда этот код завершен.

Поместите это в верхней части нормального модуля (не будет работать в виде модуля)

Option Compare Database 
Option Explicit 
Global IsCode As Boolean 

, а затем в коде вы работаете только установить IsCode=true по мере необходимости.

+0

Неплохая идея, я также подумал о свойстве формы 'isCode', чтобы установить' True' или 'False' в зависимости от того, хочу ли я, чтобы обработчик событий был запущен, но будет ждать немного больше, чтобы увидеть если кто-то знает какой-то способ деактивировать обработчик событий в VBA (я думаю, это было бы более чистым). –

+0

Наконец, решив использовать ваше решение, я предпочел не перегружать форму бесполезными свойствами, и никто еще не сказал мне, как удалить слушателя изменений! спасибо –

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

  • Нет связанных вопросов^_^