С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 11

Событие AfterUpdate в модуле классов

24.03.2015, 09:22. Показов 5415. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, столкнулся с проблемой. Как выловить событие AfterUpdate для TextBox в модуле классов?
Так же интересует событие Enter.
Миниатюры
Событие AfterUpdate в модуле классов  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.03.2015, 09:22
Ответы с готовыми решениями:

Проверка после AfterUpdate
Привет! Есть задача. Для нескольких TextBox сделать проверку. Если значение менее 20 показывать другую форму. Не пойму, какой...

Как сделать чтобы работало событие AfterUpdate() для "Флажка"?
Цель: Сделать чтобы - при переходе курсором в форму таблицу "01_02_КафедраТаблица" фон надписи "Надпись9"...

Подписка на событие с обработчиком в общем модуле
Доброго времени суток господа программисты ! Проблема в следующем: 1. Создаю подписку на событие при проведении документа. 2....

12
496 / 130 / 19
Регистрация: 30.03.2010
Сообщений: 224
24.03.2015, 12:50
у MSForms.TextBox нет таких событий
они есть у MSForms.Control, который в принципе тоже может быть текстбоксом
как вариант вижу завести вспомогательный объект типа MSForms.Control, связать его через Set с объектом типа MSForms.TextBox и ловить события вспомогательного объекта, который по сути тот же самый текстбокс
0
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 11
25.03.2015, 12:24  [ТС]
Цитата Сообщение от petr-sev Посмотреть сообщение
как вариант вижу завести вспомогательный объект типа MSForms.Control, связать его через Set с объектом типа MSForms.TextBox и ловить события вспомогательного объекта, который по сути тот же самый текстбокс
С кодом не поможете? Как это реализовать?

Добавлено через 11 часов 29 минут
Подкиньте код, люди!!!!
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
25.03.2015, 13:01
(не работает)
0
496 / 130 / 19
Регистрация: 30.03.2010
Сообщений: 224
25.03.2015, 17:44
Public WithEvents obj As MSForms.Control - описание промежуточного объекта
Set obj = oTxtBx - после создания текстбокса связать их
не факт, что так в лоб будет работать, поэкспериментируйте сами над объектами
на голом месте, без проекта, что-то советовать трудно, а лепить свой для проверки - довольно трудоемко
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
25.03.2015, 18:10
Цитата Сообщение от petr-sev Посмотреть сообщение
довольно трудоемко
Создать форму с текстбоксом, модуль класса и 10 строк кода - трудоемко?
Я проделал это - не работает, переменной типа MSForms.Control с WithEvents не хочет присваиваться ссылка на текстбокс . Без WithEvents - пожалуйста.
0
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 11
26.03.2015, 13:19  [ТС]
Не пашет...

Добавлено через 6 часов 23 минуты
Может есть какие-нибудь костыли, коллеги? На форме 496 TextBox'ов Ну о-о-очень не хочется для них всех по процедуре*2 впаять. Читал в одной книге, что в Классе события объекта Control не применимы к объекту TextBox и иже с ним. Однако в стандартном модуле TextBox как раз и унаследовал эти события от Control'а. Ну не верю я что в Классе допустили такой ляп. Интуитивно осознаю, что возможность применить эти события есть. Хотя бы через костыли. Откликнитесь, народ!!! Может кто чего слышал!? Или сообразит. Проект затормозил.
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
26.03.2015, 14:27
Я встречал на одном англоязычном форуме упоминание о том, что можно перехватывать все события формы (включая события контролов). Но как это сделать - там написано не было. Представляю, что это будет погружение в дебри WinApi.
Неужели Вы не можете обойтись без событий AfterUpdate, Enter? Обычно достаточно тех, что есть. Подумайте над логикой работы.
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
26.03.2015, 14:29
А вам принципиальна разница событий AfterUpdate и Change?
AfterUpdate Event
Occurs after data in a control is changed through the user interface.
(Происходит после того, как данные элемента управления изменяются через пользовательский интерфейс)
Change Event
Occurs when the Value property changes.
(Происходит, если меняется свойство Value)
По-моему, событие Change подойдёт для большинства случаев, где нужно AfterUpdate.
Если точно не подойдёт, то у вас есть старый добрый костыль - сабклассинг окон средствами WinAPI.
0
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 11
26.03.2015, 15:17  [ТС]
Вот нашёл в англо-американском кластере:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
'*********Class module*********
Private WithEvents mTxt as TextBox
 
Public Property Set Control(txt as TextBox)
Set mTxt = txt
With mTxt
.OnEnter = "[Event Procedure]"
.....whatever other props you want to set....
End With
End Property
 
Public Property Get Control as TextBox
Set Control = mTxt
End Property
 
Private Sub mTxt_Enter()
mTxt.BackColor = vbCyan
End Sub
 
'*********Form declarations*********
Private mTxt(1) as TextBox
 
'*********Form module*********
Private Sub Form_Load()
For i = 0 to 1
Set mTxt(i) = New Class1
Next i
 
Set mTxt(0).Control = Me.Text1
Set mTxt(1).Control = Me.Text2
End Sub
 
Private Sub Form_Unload()
For i = 0 to 1
Set mTxt(i) = Nothing
Next i
End Sub
 
'*********End Code*********
Как бы TextBox'ы должны менять цвет в фокусе. Закинул в пробник... не пашет. Что не так?

Добавлено через 3 минуты
Может всё-таки через Property Set пробовать. WinAPI в топку.

Необходимость использования именно этих событий в проекте оправдана. Например при фокусе определённого TextBox'а должен подсвечиваться определённый Label. При чём тут Change? События ведь не произошло.

Добавлено через 3 минуты
AfterUpdate, после ввода значения в TextBox, оно - значение должно приобрести определённый формат. При чём тут Change, событие уже другое.

Добавлено через 29 минут
Тут вообще всё красиво расписано, но не работает... http://www.ozgrid.com/forum/sh... p?t=154659
0
496 / 130 / 19
Регистрация: 30.03.2010
Сообщений: 224
26.03.2015, 15:24
Цитата Сообщение от Казанский Посмотреть сообщение
Создать форму с текстбоксом, модуль класса и 10 строк кода - трудоемко?
Я проделал это - не работает, переменной типа MSForms.Control с WithEvents не хочет присваиваться ссылка на текстбокс . Без WithEvents - пожалуйста.
но текстбокс не на форме находится, а создается как объект (если верить скриншоту)
и кстати в этом случае Set таки работает - как раз это мне удалось проверить
0
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 11
28.03.2015, 05:22  [ТС]
Файл в студию, плз.

Добавлено через 11 часов 51 минуту
С событием Enter в своём случае разобрался. Как и предполагалось через костыли. Влепил код для Enter в обработчик MouseMuve (как вариант - MouseDown). В обработчики KeyUp, KeyDown, KeyPress влепил ссылки на MouseMuve с параметрами "1, 0, 0, 0", хотя, думаю подойдут любые параметры. Для моих целей подошло. Код выполняется с небольшой (мс) задержкой... Пойдёт.
Может кому пригодиться.

Теперь остался грёбаный AfterUpdate. Работаем...

Добавлено через 3 часа 48 минут
Разобрался и с AfterUpdate. Принцип тот же. Разместил код в обработчике KeyDown и указал условия выполнения. При нажатии клавиш Enter, TAB, стрелки выполняется часть кода. Осталась одна проблема. Что если пользователь не нажимает клавиши а выбирает TextBox'ы мышью.

Добавлено через 27 минут
Есть одна мысль. Как запомнить в некой переменной последний изменяемый TextBox? Что-то типа PreviousControl в Access.

Добавлено через 21 час 48 минут
Запихал в Public имя TextBox'а из TextBox_KeyUp модуля класса и применил этот Public в процедуре MouseDown, а из TextBox_KeyDown модуля классов с условиями vbKeyDown = 9, 13, 37, 38, 39, 40 отправил в MouseDown с параметрами 1, 0, 0, 0.
Вот вам 100% замена события AfterUpdate в модуле классов для Text_ и Combo_ Box'ов. Пользуйтесь.
Всем спасибо за участие. Будут какие-то мысли, пишите, я на связи.
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 1
14.11.2017, 13:21
К сожалению не 100%. Не сработает если пользователь мышью уйдет с формы (к примеру нажмет сохранение файла), то в последнем изменяемом TextBox'е update не выполнится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2017, 13:21
Помогаю со студенческими работами здесь

Описание двух классов в одном модуле
Привет, всем. Короче сразу к теме. В модуле уже описан класс(пусть даже формы). Куда следует описывать другие классы и объекты(потоки,...

Не работает код в модуле, содержащий событие формы
Студия ругается на это Form1.RichTextBox1.LinkClicked Namespace Rich Module Settings Public Sub...

Подпись на событие в матрёшке классов
Добрый день. у меня такая проблема что, в классе формы есть класс А, и в классе А есть класс Б (Матрёшка классов Form => А => Б) ...

Подписка кнопки на событие из библиотеки классов
Создал проект WindowsFormsControlLibrary. Добавил label и button все с компилировал. Без проблем подключил в проект WindowsForms. Но...

Внешнее событие из библиотеки классов в 1C-форму
Всем здравствуйте! Я разрабатываю внешнюю компоненту для 1С 7.7 на C#. Есть множество функций, которые корректно работают. Но появилась...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru