Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
207 / 23 / 6
Регистрация: 12.06.2012
Сообщений: 235

Сложный уровень: как поймать событие от динамических контролов?

06.05.2013, 18:14. Показов 1055. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, если кто в курсе темы, может подскажет в какую сторону двигаться...
В общем есть класс, в нём объявлены пару контролов и одно событие:
PureBasic
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
Option Explicit
 
Private WithEvents ctlTextbox    As VB.TextBox
Private WithEvents ctlCheckBox   As VB.CheckBox
 
Public Event OnChange(ByVal Text As String)
 
Private Sub Change(ByVal Text As String)
    RaiseEvent OnChange(Text)
End Sub
 
Public Property Set TextBox(rhs As TextBox)
    Set ctlTextbox = rhs
End Property
 
Public Property Get TextBox() As TextBox
    Set TextBox = ctlTextbox
End Property
 
Public Property Set CheckBox(rhs As CheckBox)
    Set ctlCheckBox = rhs
End Property
 
Public Property Get CheckBox() As CheckBox
    Set CheckBox = ctlCheckBox
End Property
 
Private Sub ctlCheckBox_Click()
    Call Change("clatz")
End Sub
На форме объявляю событие для этого класса
PureBasic
1
2
3
4
5
6
Option Explicit
Public WithEvents cls           As cClass1
 
Private Sub cls_OnChange(ByVal Text As String)
    Debug.Print Text
End Sub
В общем, эта тема работает если я добавляю только одну группу контролов:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Form_Load()
    Set cls = New cClass1    
    Set cls.TextBox = Controls.Add("VB.TextBox", "txt1", Form1)
    Set cls.CheckBox = Controls.Add("VB.CheckBox", "chk1", Form1)
 
    'если добавляем ещё одну группы контролов, то событие не генерится от первого чекбокса    
    Set cls.TextBox = Controls.Add("VB.TextBox", "txt2", Form1)
    Set cls.CheckBox = Controls.Add("VB.CheckBox", "chk2", Form1)
    
    SetTopMostWindow Me.hwnd, True
End Sub
Вопрос: как добиться генерирования события и от первого чекбокса и от второго?

на вбстритс задавал этот вопрос, Господин Хакер рекомендует использовать объекты-спутники и спутники-подписчики... Но на практике пока не удаётся найти разъяснение этому процессу.
Может быть у местных форумчан есть сведения, как использовать эти спутники?
На всякий пожарный вот ветка: Ссылка удалена
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2013, 18:14
Ответы с готовыми решениями:

Как поймать событие на Combobox?
Добрый день. есть заполненный combobox. autocompletemode = suggestappend autocompletesource = listitems как можно отследить...

Как поймать событие OnHint?
Я хочу поймать hint на taskbar? Возможно ли это?

Как поймать событие скроллинга в listBox?
Кто-нибудь знает куда копать? События, отвечающего за скроллинг (как горизонтальный, так и вертикальный) у ListBox НЕТ. Тогда как можно...

5
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
06.05.2013, 19:05
Цитата Сообщение от sergeos Посмотреть сообщение
Вопрос: как добиться генерирования события и от первого чекбокса и от второго?
Использовать ещё один экземпляр класса?
0
207 / 23 / 6
Регистрация: 12.06.2012
Сообщений: 235
06.05.2013, 19:09  [ТС]
Цитата Сообщение от SoftIce Посмотреть сообщение
Использовать ещё один экземпляр класса?
Так смысл тогда в динамических контролах?
Можно сразу 2 на форму кинуть и использовать их методы.

Проблема как раз-таки в том, что изначально не известно какое количество их будет генерится на форме.
Может 2, а может 15.
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,906
06.05.2013, 19:30
А если не заморачиваться с классами, а объявить для каждого из контролов, склонных к размножению, свойство индекс=0, и подгружать их по необходимости как-то так
Visual Basic
1
2
For I = 1 To N 
   Load TextBox1(I)
Для событий массива контролов понадобится один стандартный обработчик
2
207 / 23 / 6
Регистрация: 12.06.2012
Сообщений: 235
06.05.2013, 19:47  [ТС]
Апострофф, С индексами я думал тоже, но что-то не думается толком.
Думаю, что только с классами можно что-то решить.

Ещё Хакер, говаривал, мол:
Ах, я бы хотел рассказать всю систему подписки на событий, но во-первых мне некогда, а во-вторых, думаю, мало смысла.

Эта тема уже тысячу раз обсуждалась. Решение в общих чертах выглядит так: создаётся класс для объектов-спутников. На каждый объект, на события которого мы хотим подписаться, мы должны создать спутник-подписчик. Все спутники подписчики будут вызывать метод мастер-объекта, пердавая кроме актуальных параметров события ещё и опознавательный знак.
Что за подписки? Что это за спутники? Ё-маё, ума не приложу, кто с кем обсуждал эту тему тысячу раз. У кого ни спрошу - никто ничего не обсуждал. Но решение надо полагать какое-то есть, а с Хакером договорится в принципе нереально.
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
06.05.2013, 20:14
Почитайте Как проверить, в каком из Checkbox пользователь сделал выбор? и по ссылкам оттуда.
Там про VBA, но работа с классами, в принципе, такая же.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2013, 20:14
Помогаю со студенческими работами здесь

Как поймать событие нажатия пальцами на экран?
Добрый день. Хочу поймать событие нажатия пальцами на экран. Использую public boolean onTouchEvent (MotionEvent event) - но...

Как поймать событие переключения вкладок в tabControl C#
Извеняюсь за дубль... немного повис инет...

Как поймать событие добавление записи на сервере
В сети несколько машин. Таблицы храняться на серверной базе MySQL. Оператор добавляет или изменяет запись. Как на другой сетевой машине...

Как поймать событие прокрутки колеса user32.dll?
Привет! У меня стоит задача ловить все действия мыши и их обрабатывать, но ловить не в форме по всему экрану, при свернутой форме и т.д. По...

Как поймать событие нажатия мыши в WebEngineView в QML
Здравствуйте! Имеется следующего вида код в QML: import QtQuick 2.12 import QtWebEngine 1.8 import QtQuick.Controls 1.4 ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru