22 / 22 / 7
Регистрация: 21.04.2010
Сообщений: 66
1

Обработка одной процедурой нескольких объектов без указания имени

21.05.2012, 13:28. Показов 1946. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
-на форме есть несколько полей ввода (TextBox), для них сделал процедуру обработки вводимых символов :

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
private void blok(KeyPressEventArgs e, TextBox t)
        {
            if ((e.KeyChar >= '0') && (e.KeyChar <= '9'))
            {
                return;
 
            }
            if (e.KeyChar == '.') e.KeyChar = ',';
 
            if (e.KeyChar == ',')
            {
                if ((t.Text.IndexOf(',') != -1) || (t.Text.Length == 0))
                {
                    e.Handled = true;
                }
                return;
            }
 
            if (char.IsControl(e.KeyChar))
            {
                if (e.KeyChar == (char)Keys.Enter)
                {
                    button1.Focus();
                }
                return;
            }
 
            e.Handled = true;
        }
Для вызова использую событие KeyPress каждого textBox'a.

C#
1
 blok(e, textBox1);
Возникли следующие вопросы:
-возможно ли убрать из вызова процедуры имя объекта, если да, то как?
-Если у меня много TextBox'ов, можно ли не писать для каждого объекта, что он делает при событии KeyPress, а, например, автоматически вызывать процедуру Blok при каждой нажатой кнопке? и есть ли в этом смысл?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2012, 13:28
Ответы с готовыми решениями:

Обработка нескольких событий одной процедурой
Здравствуйте... Не могу понять тему, указанную в заголовке..Сейчас читаю Зиборова.. И там есть...

Сопоставление ограничения, введенного без указания имени ограничения, и имени соответствующего столбца средствами SSMS
Если для какого-то столбца введено ограничение UNIQUE или DEFAULT без явного указания имени...

Распаковать и переименовать файл без указания его имени
Добрый день. Помогите пожалуйста с таким скриптиком. С баш незнаком но пришлось. Запускал через...

Задание имени нового создаваемого файла без указания расширения
На форме есть текстовое поле где пользователь задаёт имя создаваемого файла без указания...

5
687 / 601 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
21.05.2012, 14:07 2
Лучший ответ Сообщение было отмечено как решение

Решение

Нужно всего лишь задать для всех текстбоксож один и тот же обработчик события.
Пример прилагаю. Студия 10-ая, если не откроет код тоже привожу.
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
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (TextBox tb in this.Controls.OfType<TextBox>())
            {
                tb.KeyPress += new KeyPressEventHandler(tb_KeyPress);
            }
        }
 
        void tb_KeyPress(object sender, KeyPressEventArgs e)
        {
            TextBox t = sender as TextBox;
            if ((e.KeyChar >= '0') && (e.KeyChar <= '9'))
            {
                return;
 
            }
            if (e.KeyChar == '.') e.KeyChar = ',';
 
            if (e.KeyChar == ',')
            {
                if ((t.Text.IndexOf(',') != -1) || (t.Text.Length == 0))
                {
                    e.Handled = true;
                }
                return;
            }
 
            //if (char.IsControl(e.KeyChar))
            //{
            //    if (e.KeyChar == (char)Keys.Enter)
            //    {
            //        button1.Focus();
            //    }
            //    return;
            //}
 
            e.Handled = true;
        }
 
    }
Вложения
Тип файла: rar CyberForum.rar (36.0 Кб, 11 просмотров)
3
Эксперт Java
4090 / 3824 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
21.05.2012, 14:08 3
Можно вручную в коде добавить обработчики в конструкторе
C#
1
2
3
textBox1.KeyPress += textBox_KeyPress;
textBox2.KeyPress += textBox_KeyPress;
textBox3.KeyPress += textBox_KeyPress;
Сделать метод textBox_KeyPress. В качестве sender будет передаваться текстбокс, для которого произошло событие
C#
1
2
3
4
5
private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
   TextBox t = (TextBox)sender;
   //дальше скопируйте сюда тело вашего block
}
0
22 / 22 / 7
Регистрация: 21.04.2010
Сообщений: 66
21.05.2012, 14:30  [ТС] 4
[QUOTE=Бельфегор;3060698] Здорово. Это то, что я хотел. А можно попросить с подробными комментариями дописанных вами строк. хотелось бы разобраться.
0
687 / 601 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
21.05.2012, 15:23 5
C#
1
2
3
4
 foreach (TextBox tb in this.Controls.OfType<TextBox>())
            {
                tb.KeyPress += new KeyPressEventHandler(tb_KeyPress);
            }
this.Controls содержит контролы на форме (все контейнер контролы, которые реализуют интерфейс IContainer, имеют это свойство). .OfType<TextBox>()- отбираем из свойства Controls только текстбоксы (LINQ).
C#
1
tb.KeyPress += new KeyPressEventHandler(tb_KeyPress);
добавляем событые для текстбокса, задаем метод обработчик tb_KeyPress, то есть для всех найденных текстбоксов будет один и тот же обработчик.
В обработчике эта строк
C#
1
TextBox t = sender as TextBox;
явная конвертация оператором as. В принципе то же самое что
C#
1
(TextBox)sender;
только быстрее и можно использовать только с nullable типами. Остальное думаю понятно.
1
22 / 22 / 7
Регистрация: 21.04.2010
Сообщений: 66
21.05.2012, 15:30  [ТС] 6
да. Спасибо огромное.
0
21.05.2012, 15:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2012, 15:30
Помогаю со студенческими работами здесь

Вызов метода split без явного указания имени параметров
data class NameComponents(val name: String, val extension: String) fun...

Чтение нескольких файлов одной процедурой с параметром
Всем здравствуйте! Помогие сделать следующие.. Почитать два файла одной процедурой с параметром и...

Обработка компонентов одной процедурой на разных формах
Доброго времени суток. На форме есть несколько однотипных компонентов TRadioGroup для каждого...

Обработка нескольких объектов
Доброго времени суток. Как, назначив один обработчик нескольким однотипным объектам, различать их в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru