|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|||||||
Вызов события TextChanged в TextBox по нажатию Enter20.02.2014, 11:57. Показов 25222. Ответов 20
Метки нет (Все метки)
Есть несколько TextBox'сов. Вполне логично прикрутить по событию TextChanged некоторую обработку.
Но! Чтоб активировалось это событие TextBox должен потерять фокус - а это не очень удобно. прикручиваю метод на KeyDown:
0
|
|||||||
| 20.02.2014, 11:57 | |
|
Ответы с готовыми решениями:
20
Вызов события из другого события по нажатию клавиши Отмена события по нажатию на Enter Убрать обработку события по нажатию Enter |
|
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
|
||
| 20.02.2014, 12:10 | ||
|
В общем, либо вызывайте обработчик события напрямую, либо создайте метод, который вы будете вызывать, как из обработчика события TextChanged, так и из обработчика события KeyDown.
1
|
||
|
|
|||
| 20.02.2014, 12:22 | |||
|
Не по теме:
событие как раз нормальное. На событие либо подписку нужно делать, что собственно в данном случае абсолютно не нужно, либо напрямую вызывать метод, который работает при требуемом событии.
1
|
|||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 20.02.2014, 13:02 [ТС] | |
|
значит будем создавать свой TextBox.
свое заключение о корявости я заключил из статьи msdn то, что указано как пример использования события(и как я раньше пользовался событиями сам) не работает с контролами .
0
|
|
|
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
|
|||
| 20.02.2014, 14:02 | |||
|
объект может вызвать свои и только свои события. Даже наследник не имеет полного доступа к функционалу событий предка. а по поводу задачи.. Очевидно, что раз необходимо вызвать событие TextChanged, на это событие подвешан какой-то обработчик. Предполагается, что если используется конструкция "(sender as TextBox)." то подобных объектов как минимум больше одного. Так же разумно предположить, что если необходимо нажимать enter для костыльного вызова обработчиков TextChanged, либо: а) Обработчик зависит от внешних, постоянно изменяющихся объектов (потоки, либо банальный рандом). б) Сильно, очень сильно хромает логика MVC в) Обработчики события добавляются после установки первоначального значения текста (в принципе это "б") нужно или править логику, либо при нажатии enter изменять текст и возвращать его в исходное состояние (двойной вызов события, явный костыль, причем корявый), либо таки создать предка TextBox с
0
|
|||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
||||||
| 20.02.2014, 15:17 [ТС] | ||||||
|
задача более чем полностью отражена в теме.
1) по сути: имеем сто тыщ TextBox 2) изменение текста вызывает определенную обработку 3) используется метод прикрученный к TextChanged, у каждого свой 4) если бы работало как в статье мсдн: - создаем статический метод, который по нажатию Enter вызывает у TextBox'а отправителя событие TextChanged - прикрутив к событию KeyDown наш статический метод Любой TextBox теперь адекватно реагирует на нажатие Enter. PROFIT!!! 5) что по факту имею: на каждом TextBox свой метод KeyDown который вызывает нужный метод, отличаясь лишь названием метода(а этот метод и так прикручен уже к TextChanged) = говнокод Добавлено через 10 минут да, из-за того что событие в контролах ограничено ТОЛЬКО += и -=, а вызов события - защищенный метод приходится создавать свой ТВ:
0
|
||||||
|
|
|
| 20.02.2014, 15:54 | |
|
Learx, я не понимаю, зачем использовать KeyDown для вызова TextChanged? Почему не использовать сразу TextChanged? Изменился текст - сработал соответствующий обработчик. А тут какая-то левая подписка каждого текстбокса на общее событие, только для того, что бы оно вызвало опять же индивидуальное для вызывающего событие....
0
|
|
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 20.02.2014, 16:04 [ТС] | |
|
изменение текста->вызов обработки
как определить изменение текста: 1) событие TextChanged 2) нажатие Enter вопросы: 1. как сделать чтоб при каждом из случаев(и 1 и 2) выполнялся один метод? 2. как это дело оптимизировать, чтоб работало на всех TextBox, которые требуют обработки после изменения содержимого(а не городить тысячи методов, когда нам на самом деле требуется одно и то же поведение)
0
|
|
|
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
|
||||
| 20.02.2014, 16:15 | ||||
|
и да:
0
|
||||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|||
| 20.02.2014, 17:02 [ТС] | |||
цель данного топика - сократить количество методов1 и 2 которые по сути есть болванка для поведения текстбокса
0
|
|||
|
|
|
| 20.02.2014, 17:49 | |
|
Learx, ты решаешь проблему не с той стороны: KeyDown - ловит событие нажатия кнопки, при нажатии ввода тебе нужно выполнить тоже самое, что происходит при окончании редактирования. Поэтому тебе нужно не искать способ вызова события, а создать его. Т.е. при нажатии Enter должно быть окончено редактирование текcта, это автоматически вызовет событие TextChanged
0
|
|
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 21.02.2014, 16:41 [ТС] | |
|
0
|
|
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 24.02.2014, 12:40 [ТС] | |
|
в моем понимании "окончание редактирования" - это и есть вызов события TextChanged. реализовал свой класс и все работает как надо.
Другие две возможности: вызов OnTextChanged или непосредственно события TextChanged невозможны из-за их ограничений, приходится создавать свой класс-наследник.
0
|
|
|
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
|
|||||||
| 24.02.2014, 15:24 | |||||||
|
Добавлено через 22 минуты на мой взгляд правильнее организовать как то так:
Как только нажат enter (или способ для ленивых - переход на новый контрол без нажатия) проверяется значение тэга, и если оно не false, то действие и не требуется, иначе установка тэга в true и вызов специального обработчика для контрола. Можно даже допилить метод allBox_StartEdit чтоб и внутри него постоянно проверялся тэг, и если он уже false, то ничего и делать ненужно. Как итог - у нас количество обработчиков ровно на два больше чем количество текст-боксов, а пользователь сразу видит реальные значение Control модели. Ну или если бокс зелёный - View модели.
0
|
|||||||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 24.02.2014, 15:25 [ТС] | |
|
это уже черезчур.
рабочий вариант найден, и он гораздо компакнее вашего кода.
0
|
|
|
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
|
||||||||
| 24.02.2014, 15:35 | ||||||||
|
хотя... если грамотно организовать многопоточность - то это конечно удобней для пользователя. но опять же, при чём тут событие нажатия enter - не могу понять. Или просто может потребоваться сделать одно и то же действие несколько раз подряд? случай наподобие такого:
0
|
||||||||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 25.02.2014, 11:47 [ТС] | |
|
в том то и дело что не вызывается событие по мере ввода. событие возникает при потере фокуса текстбоксом!
0
|
|
|
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
|
|
| 25.02.2014, 12:09 | |
|
э... простите конечно, но событие TextChanged вызывается при изменении свойства Text класса TextBox, а при потере фокуса происходит событие LostFocus. может вы не на то событие подписали обработчик? это более вероятно чем описанная вами ситуация.
0
|
|
|
0 / 0 / 0
Регистрация: 07.01.2015
Сообщений: 39
|
||||||
| 08.01.2015, 12:12 | ||||||
|
Есть код. Выдает ошибку, что нет определения для txtBox_TextChanged и txtBoxEmpty_Validating
. Как и куда его записать![]() ?
0
|
||||||
| 08.01.2015, 12:12 | |
|
Помогаю со студенческими работами здесь
20
Вызов процедудры по нажатию Enter <input> вызов onclick-обработчика по нажатию enter Обработка данных из TextBox по нажатию Enter
Как по нажатию Enter перейти на новую строку в TextBox Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|