646 / 474 / 38
Регистрация: 04.11.2013
Сообщений: 1,949
|
||||||
1 | ||||||
Единый обработчик событий для нескольких схожих элементов17.01.2014, 21:36. Показов 4950. Ответов 17
Метки нет (Все метки)
Есть 15 ТекстБоксов с именами TB1 .... TB15. Можно ли сделать единый обработчик события TextChanged для них по типу:
0
|
17.01.2014, 21:36 | |
Ответы с готовыми решениями:
17
Один обработчик событий для нескольких разных элементов Обработчик событий для нескольких кнопок Один обработчик событий для нескольких объектов Обработчик событий для нескольких компонентов |
Форумчанин.NET
555 / 426 / 64
Регистрация: 12.02.2013
Сообщений: 834
|
||||||
17.01.2014, 22:08 | 3 | |||||
Сообщение было отмечено как решение
Решение
3
|
Почетный модератор
21415 / 9150 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
|
||||||
17.01.2014, 22:33 | 4 | |||||
Сообщение было отмечено как решение
Решение
Если поля уже на форме, то
4
|
646 / 474 / 38
Регистрация: 04.11.2013
Сообщений: 1,949
|
|
17.01.2014, 22:34 [ТС] | 5 |
Здорово! А можно каким-нибудь из этих методов еще и отследить, какой именно текстбокс сработал (получить его номер?)? (Без кучи операторов if...)
0
|
646 / 474 / 38
Регистрация: 04.11.2013
Сообщений: 1,949
|
|
18.01.2014, 00:46 [ТС] | 7 |
Памирыч, Вижу, спасибо.
Добавлено через 7 минут Вобщем, все работает. Единственная проблема - у меня текстбоксы внутри группбокса (я как полнейший юзер использовал группбокс в качестве обычной рамочки). А внутри группбокса этот код не работает, мало того - доходит до строчки AddHandler CType ...... и выбрасывает из обработчика MyBase.Load Пошел читать про группбоксы.
0
|
Почетный модератор
21415 / 9150 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
|
|||||||||||
18.01.2014, 00:48 | 8 | ||||||||||
Proidoha, все верно, работать не будет.
Controls("TB" & I) - для формы Полное оформление - Me.Controls("TB" & I) Я должен был это пистаь целиком, Вы бы сразу поняли, что фишка в Me.
замените на
3
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 20
|
|
23.03.2019, 18:59 | 9 |
Здравствуйте, Андрей.
5 лет назад Вы писали об одном обработчике событий, но события из другого контейнера нужно было прописывать отдельной строкой с указанием имени контейнера. У меня сотни кнопок и около 30 контейнеров. Все кнопки в контейнерах с оригинальными (не повторяющимися) названиями + кнопки на самой форме. Как можно написать строки: k(x) = Controls("Button" & x) и k(x) = GroupBox1.Controls("Button" & x) и так далее, чтобы потом адресовать на обработчик строкой AddHandler k(x).Click, AddressOf k_Click Пытался менять признак Modifiers и у кнопок и у контейнеров, но из формы система эти кнопки всё равно не видит и нет возможности прописать обработчик о одном цикле(( Как сделать, чтобы не писать циклы для каждого контейнера? Спасибо!
0
|
Администратор
|
|
23.03.2019, 21:22 | 10 |
Разные варианты можно применить. Использовать Controls.Find который умеет искать элементы во вложенных контейнерах. Этот способ будет медленно работать для большого количества элементов управления. Можно перечислить все контейнеры в какой-либо коллекции и сделать один цикл по ней. Наконец можно сделать метод который рекурсивно переберет все элементы на форме.
Для конкретного примера нужно знать как именно устроена формы. Сколько контейнеров и какие они. Глубина их вложенности (текущая/планируемая). Есть ли другие кнопки на форме на которые не нужно вешать обработчик. Модификатор доступа регулирует доступ из других классов. На код внутри формы он никак не влияет.
1
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 20
|
|
27.03.2019, 23:25 | 11 |
OwenGlendower,
Максимальная глубина вложенности 2, то есть всего 3 уровня. Мне представляется более интересным реализовать перечисление контейнеров в коллекцию и сделать один цикл. Если не сложно, напишите пожалуйста, как будет выглядеть код для объединения в коллекцию? Какие особенности при обращении к ней в цикле? Спасибо.
0
|
Администратор
|
|||||||||||
28.03.2019, 02:01 | 12 | ||||||||||
serg_br, можно использовать следующую функцию перебора всех дочерних элементов
3
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 20
|
||||||
29.03.2019, 22:58 | 13 | |||||
OwenGlendower
Интегрировать код не получается, что-то не так с синтаксисом:
Аналогично не принимает Yield PS А как будет выглядеть сбор в коллекцию?
0
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 20
|
|
29.03.2019, 23:51 | 15 |
OwenGlendower, у меня Express версия vb.net 2010
0
|
Администратор
|
|||||||||||
30.03.2019, 00:34 | 16 | ||||||||||
serg_br, ясно. Итераторы доступны в VS 2012 и выше. В таком случае сделаем без них. Добавляем в проект новый модуль
1
|
Модератор
4314 / 3388 / 507
Регистрация: 27.01.2014
Сообщений: 6,186
|
|
30.03.2019, 07:17 | 17 |
OwenGlendower, очень красиво выглядят оба варианта
0
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 20
|
||||||
31.03.2019, 02:07 | 18 | |||||
OwenGlendower, большое спасибо, работает!
У меня оказалось на одну вложенность глубже. Я еще не изучил структуру vb.net, не выхожу за рамки класса и не привык применять не полностью понятный для меня код,- написал всё "своим языком". Получилось немного по-детски, но работает)) Добавлено через 1 час 19 минут OwenGlendower, Yury Komar, вот что у меня получилось. Может быть кому-нибудь пригодится
0
|
31.03.2019, 02:07 | |
31.03.2019, 02:07 | |
Помогаю со студенческими работами здесь
18
Один обработчик событий для нескольких кнопок Обработчик событий нескольких контролов? Как задать обработчик событий для элементов меню c++ WinAPI? Единый обработчик события для разных label Единый обработчик для Button и по нажатию с клавиатуры определённой кнопки Один обработчик событий на несколько коллекций элементов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |