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

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

06.05.2013, 18:14. Показов 1042. Ответов 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,904
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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru