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

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

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

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

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

Форма
Код: 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
10.07.2017, 14:16
    #39485784
Флексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить change контролов на форме, если их много
VSVLAD

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


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