powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Отловить change контролов на форме, если их много
8 сообщений из 8, страница 1 из 1
Отловить change контролов на форме, если их много
    #39485216
Флексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
на форме есть куча textbox'ов и combobox'ов
как можно попроще узнать, что в одном из контролов сработало change?
(а для combo у которых dropdownlist еще и click)
отслеживать каждый контрол не хочется. Массив из них делать тоже не хочется

Спасибо!
...
Рейтинг: 0 / 0
Отловить change контролов на форме, если их много
    #39485245
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз не хочется, то никак.
...
Рейтинг: 0 / 0
Отловить change контролов на форме, если их много
    #39485246
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы сделал пару промежуточных классов, и назначил их обработчиками событий в цикле.
...
Рейтинг: 0 / 0
Отловить change контролов на форме, если их много
    #39485268
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyА я бы сделал пару промежуточных классов, и назначил их обработчиками событий в цикле.

+1 Видел подобное решение, там еще выбор процедуры обработки зависел от имени контрола, не только классические cmb, txt, lst, но и, например, search, format, number и т.п. Весьма элегантно.
...
Рейтинг: 0 / 0
Отловить change контролов на форме, если их много
    #39485270
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyAntonariyА я бы сделал пару промежуточных классов, и назначил их обработчиками событий в цикле.

+1 Видел подобное решение, там еще выбор процедуры обработки зависел от имени контрола, не только классические cmb, txt, lst, но и, например, search, format, number и т.п. Весьма элегантно.это фигня какая-то, базовый обработчик должен зависеть от типа контрола.
...
Рейтинг: 0 / 0
Отловить change контролов на форме, если их много
    #39485386
ATM-TURBO 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто сделать класс и имплементировать в нем интерфейс обработки событий для необходимых контролов, потом через IConnectionPoint прикрепить нужные контролы к экземпляру класса. Буквально на днях исследовал работу массива контролов, можно и массивы контролов так обрабатывать.
...
Рейтинг: 0 / 0
Отловить change контролов на форме, если их много
    #39485717
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Флексей,

Можно и так попробовать, только допилив под свои нужды

Форма
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Public colTextBox As New Collection 'Для хранения ссылок на классы-оболочки

Private Sub Form_Load()
    Dim xControl As Control
    Dim tbWrapper As TextBoxWrapper
    
    For Each xControl In Me.Controls
        Set tbWrapper = New TextBoxWrapper 'Создаём оболочку для текстового поля
        
        tbWrapper.Init xControl, "TextBoxAll_Change", "TextBoxAll_Click" 'Передаём поле и имена процедур
        colTextBox.Add tbWrapper 'Добавляем в коллекцию
        
        Set tbWrapper = Nothing
    Next
End Sub

Public Sub TextBoxAll_Click(sender As TextBox) 'Глобальный обработчик клика
    MsgBox "Выбран " & sender.Name
End Sub

Public Sub TextBoxAll_Change(sender As TextBox) 'Глобальный обработчик изменения
    MsgBox "Изменен текст в " & sender.Name
End Sub



Класс TextBoxWrapper.cls
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Private WithEvents thisTextBox As TextBox 'Храним ссылку на текстовое поле
Private mChangeEventName As String 'Запоминаем названия процедур
Private mClickEventName As String

Public Sub Init(TB As TextBox, Optional ChangeEventName As String = "", Optional ClickEventName As String = "")
    Set thisTextBox = TB
    mChangeEventName = ChangeEventName
    mClickEventName = ClickEventName
End Sub

Private Sub thisTextBox_Change()
    If mChangeEventName <> "" Then
        CallByName thisTextBox.Parent, mChangeEventName, VbMethod, thisTextBox
    End If
End Sub

Private Sub thisTextBox_Click()
    If mClickEventName <> "" Then
        CallByName thisTextBox.Parent, mClickEventName, VbMethod, thisTextBox
    End If
End Sub
...
Рейтинг: 0 / 0
Отловить change контролов на форме, если их много
    #39485784
Флексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD

Спасибо :)
но буду в лоб решать, отлавливать каждый контрол
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Отловить change контролов на форме, если их много
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]