С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
2 / 2 / 1
Регистрация: 29.12.2011
Сообщений: 39

Отключение событий TextChanged

10.02.2014, 00:36. Показов 3409. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется 5 текстбоксов, при использовании события textBox1_TextChanged необходимо отключить все остальные TextChanged, удается сделать только данным способом. Может быть как-то можно сделать это циклом, или еще как-нибудь, а то такой способ придется применить для каждого textBoxN_TextChanged...
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void textBox1_TextChanged(object sender, EventArgs e)
{
            textBox2.TextChanged -= textBox2_TextChanged;
            textBox3.TextChanged -= textBox3_TextChanged;
            textBox4.TextChanged -= textBox4_TextChanged;
            textBox5.TextChanged -= textBox5_TextChanged;
            // Код.....
            textBox2.TextChanged += textBox2_TextChanged;
            textBox3.TextChanged += textBox3_TextChanged;
            textBox4.TextChanged += textBox4_TextChanged;
            textBox5.TextChanged += textBox5_TextChanged;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.02.2014, 00:36
Ответы с готовыми решениями:

Как работает TextChanged
Вроде бы плевое дело, ан-нет. Видимо что-то не так делаю или хз, но как видно по скринам, я присваиваю в comboBox1.Text = this.Username; ...

Событие, аналогичное TextChanged в dateTimePicker
Как в dateTimePicker вызвать событие аналогичное TextCanged в комбобоксе? Добавлено через 1 час 38 минут видимо ничего с этого не...

Аналог TextChanged с эффектом до изменения
Здравствуйте. Есть ли событие аналог TextChanged, но которое будет происходить до изменения текста?

10
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
10.02.2014, 01:27
Если у вас одинаково обрабатываются события для textBox2, textBox3 и т.д., то можно привязать все события к одному обработчику, а в нем уже через параметр sender определять, в каком из них произошло событие.
0
2 / 2 / 1
Регистрация: 29.12.2011
Сообщений: 39
10.02.2014, 01:41  [ТС]
Алгоритм обработки одинаков, но в каждом из них различные значения, уже на форме 20 текстбоксов вот пример:
C#
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox2.TextChanged -= textBox2_TextChanged;
            textBox3.TextChanged -= textBox3_TextChanged;
            textBox4.TextChanged -= textBox4_TextChanged;
            textBox5.TextChanged -= textBox5_TextChanged;
            textBox6.TextChanged -= textBox6_TextChanged;
            textBox7.TextChanged -= textBox7_TextChanged;
            textBox8.TextChanged -= textBox8_TextChanged;
            textBox9.TextChanged -= textBox9_TextChanged;
            textBox10.TextChanged -= textBox10_TextChanged;
            textBox11.TextChanged -= textBox11_TextChanged;
            textBox12.TextChanged -= textBox12_TextChanged;
            textBox13.TextChanged -= textBox13_TextChanged;
            textBox14.TextChanged -= textBox14_TextChanged;
            textBox15.TextChanged -= textBox15_TextChanged;
            textBox16.TextChanged -= textBox16_TextChanged;
            textBox17.TextChanged -= textBox17_TextChanged;
            textBox18.TextChanged -= textBox18_TextChanged;
            textBox19.TextChanged -= textBox19_TextChanged;
            textBox20.TextChanged -= textBox20_TextChanged;
            if (label1.Text == "Милиграмм")       // изменяется проверка
            {
                double t1;
                if (textBox1.TextLength == 0)
                    t1 = 0;
                else
                    t1 = Convert.ToDouble(textBox1.Text);
 
                double s2 = t1 / 200;                     // изменяются эти величины
                double s3 = t1 / Math.Pow(10, 3);
                double s4 = t1 / Math.Pow(10, 6);
                double s5 = t1 / Math.Pow(10, 8);
                double s6 = t1 / Math.Pow(10, 9);
                double s7 = t1 / 409500;
                double s8 = t1 / 16380000;
                double s9 = t1 / 28350;
                double s10 = t1 / 453600;
 
                if (s2 == 0)
                    textBox2.Clear();
                if (s3 == 0)
                    textBox3.Clear();
                if (s4 == 0)
                    textBox4.Clear();
                if (s5 == 0)
                    textBox5.Clear();
                if (s6 == 0)
                    textBox6.Clear();
                if (s7 == 0)
                    textBox7.Clear();
                if (s8 == 0)
                    textBox8.Clear();
                if (s9 == 0)
                    textBox9.Clear();
                if (s10 == 0)
                    textBox10.Clear();
                else
                {
                    textBox2.Text = Convert.ToString(s2);
                    textBox3.Text = Convert.ToString(s3);
                    textBox4.Text = Convert.ToString(s4);
                    textBox5.Text = Convert.ToString(s5);
                    textBox6.Text = Convert.ToString(s6);
                    textBox7.Text = Convert.ToString(s7);
                    textBox8.Text = Convert.ToString(s8);
                    textBox9.Text = Convert.ToString(s9);
                    textBox10.Text = Convert.ToString(s10);
                }
            }
}
0
 Аватар для Юрий Владимиров
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
10.02.2014, 01:52
а что мешает создать массив из ТекстБоксов?
т. е. работа не в design-time а в run-time - создаешь динамически все что нужно, проставляешь обработчики, обрабатываешь и выполняется обработчик.
0
2 / 2 / 1
Регистрация: 29.12.2011
Сообщений: 39
10.02.2014, 02:05  [ТС]
Что касается обработки самой, можно пример?
0
 Аватар для Юрий Владимиров
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
10.02.2014, 02:48
ну пишешь процедуру обработчик, объявляешь ее в секции private (или паблик):
Delphi
1
2
3
4
Procedure OnEventTBn( Sender : TObject ); // создаем в соотв. с шаблоном процедуры обработчика 
BEGIN
if (sender as TTextBox).ClassName=...
END;
ClassName задаешь в цикле при создании массива компонентов.
создание:

Delphi
1
2
3
4
5
6
7
TB[1]:=TButton.Create(Form1);
TB[1].parent:=form1;
// задаем координаты и все остальные динамические параметры
...
TB[1].Name:=TB[1].ClassName+'1';
TButton(TB[1]).OnClick:=OnEventTBn;
...
думаю алгоритм понятен в общих чертах?

тут глянь:
[ http://wm-help.net/articles/ar... 7-122.html ]

сейчас 1 ночи, если не получится, то маякни, завтра вечером полный текст скину.
1
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
10.02.2014, 07:05
Лучший ответ Сообщение было отмечено rodinjr как решение

Решение

Цитата Сообщение от rodinjr Посмотреть сообщение
Может быть как-то можно сделать это циклом, или еще как-нибудь
У вас для каждого TextBox'а свой обработчик события TextChanged. Это усложняет реализацию данного процесса через цикл и подобные структуры. Самый простой способ - это создать в классе некий флаг, смысл которого примерно следующий:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private bool flag = false;
 
private void textBox1_TextChanged(object sender, EventArgs e)
{
// Данная конструкция будет в каждом TextChanged.
// Выполняем код только если flag равен false.
    if(!flag)
    {
// Сначала устанавливаем значение флага равное true, чтобы не срабатывал код в других обработчиках события TextChanged.
        flag = true;
// Выполняем неоходимые дейтствия.
        // Ваши действия
// Возвращаем флагу значение false, чтобы следующее событие TextChanged сработало.
        flag = false;
    }
}
1
2 / 2 / 1
Регистрация: 29.12.2011
Сообщений: 39
10.02.2014, 14:22  [ТС]
Спасибо, этот вариант это то, что нужно. И просто все в то же время.

Добавлено через 52 минуты
Не совсем по данной теме есть вопрос, в вышеприведенном коде используется оператор if-else
C#
1
2
3
4
5
6
       if (s2 == 0)
                        textBox2.Clear();
                    else
                    {
                        textBox2.Text = Convert.ToString(s2);
                    }
по сути тернарный оператор работает аналогично этой конструкции, но все же возникают некоторые проблемы

C#
1
s2 == 0 ? textBox2.Clear() : textBox2.Text = Convert.ToString(s2);
этот вариант компилятор не воспринимает, может кто-нибудь расскажет почему?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
10.02.2014, 15:55
Цитата Сообщение от rodinjr
этот вариант компилятор не воспринимает, может кто-нибудь расскажет почему?
А компилятор плохо про это говорит? По идее, должен понятно изъясниться. Но проверить не могу, так как пишу с телефона ... В тернарном операторе выражения после знака вопроса должны иметь одинаковый тип. У вас же одно void, другое string. Есть ещё сомнение по поводу возможности использования типа void, в тернарном операторе, но проверить не могу ...

Добавлено через 3 минуты
Правильно в данном случае будет так:
C#
1
textBox.Text = s2 == 0 ? string.Empty : s2.ToString()
0
 Аватар для Юрий Владимиров
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
10.02.2014, 20:37
а точку-с-запятой разве нужно ставить?
может так:
C#
1
2
3
4
5
6
if (s2 == 0)
                        textBox2.Clear()
                    else
                    {
                        textBox2.Text = Convert.ToString(s2);
                    }
0
2 / 2 / 1
Регистрация: 29.12.2011
Сообщений: 39
12.02.2014, 00:30  [ТС]
Не, точка с запятой нужна
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2014, 00:30
Помогаю со студенческими работами здесь

Событие textchanged для массива текстбоксов
на одно кнопке я создал массив текстбоксов (вообще на форме до этого нет текстбоксов). на другой кнопке я считывают там нужные мне...

Совмещение нескольких TextChanged в разных TextBox
Есть форма на которой расположено много текстбоксов, задача в том, что при вводе значения в один из них в остальных выводило данное число...

Вызов события TextChanged в TextBox по нажатию Enter
Есть несколько TextBox'сов. Вполне логично прикрутить по событию TextChanged некоторую обработку. Но! Чтоб активировалось это событие...

Как можно изменить свойство Text у ComboBox, обходя событие TextChanged?
Всем привет. Подскажите, пожалуйста, как можно изменить свойство Text у ComboBox, обходя событие TextChanged? Пытался отключить...

Отключение обработчика событий
На форме есть несколько чекбоксов, для которых прописаны события this->checkBox1->CheckedChanged += gcnew System::EventHandler(this,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru