Обновление формы VBA после значений, заданных в коде вместо AfterUpdate () - PullRequest
2 голосов
/ 05 мая 2009

У меня есть несколько полей со списком и опциями, видимость которых установлена ​​в true или false, в зависимости от выбора пользователем других родительских опций.

Я использую функцию AfterUpdate() для родительских опций. Этот метод работал нормально.

Однако, когда я устанавливаю значения полей параметров в коде VBA (Me.MyOptionBox = 1), «обновление» отсутствует, чтобы сделать дочерний параметр и поля со списком появившимися. Это работает, когда я вручную нажимаю на опцию, но если я установил ее в коде, ничего не изменится, кроме выбора поля опции. Не имеет смысла видеть, что поле параметров установлено правильно, но код, отвечающий за проверку, какой параметр выбран, не работает.

У кого-нибудь есть идеи, как это обойти? Я просто хочу, чтобы форма обновлялась после установки значений в полях параметров. Что такое «обновление», на которое ссылается AfterUpdate()?

Я пробовал MyForm.Repaint и MyForm.Requery, но они тоже не работают.
Есть идеи?

Ответы [ 4 ]

1 голос
/ 05 мая 2009

В VBA большинство событий элемента управления не запускаются, когда элемент управления обновляется программно, а не вручную. Вы должны указать код, который будет запускаться после программного обновления.

1 голос
/ 05 мая 2009

Я уверен, что это намеренно. Проблема состоит в том, чтобы избежать циклического рекурсивного обновления, если учесть, что элемент управления может быть изменен пользователем и двумя формами кода (явные и связанные данные).

Для связанных элементов управления изменения данных изменяют элементы управления.

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

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

Если вы используете связанные элементы управления, вы можете изменить источник данных и применить последствия автоматически.

1 голос
/ 05 мая 2009

Вы можете вызвать метод OptionBox_AfterUpdate () напрямую - после установки значений.

0 голосов
/ 05 мая 2009

Под словом «Я использую функцию AfterUpdate ()» вы подразумеваете, что добавили обработчик события для события AfterUpdate, верно?

Если этот обработчик не запускается, когда вы этого ожидаете, вы всегда можете вызвать его непосредственно (вместо того, чтобы событие вызывало его), где это необходимо. Но это, вероятно, не самый лучший способ сделать это; более вероятно, что есть другое событие, которое должно вызывать ваш обработчик вместо AfterUpdate или в дополнение к нему. Я не помню названий событий поля со списком, но разве нет ничего похожего на ItemChanged или SelectionChanged или что-то в этом роде?

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