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

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. -на форме есть несколько полей ввода (TextBox), для них сделал процедуру обработки вводимых символов :
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.
 blok(e, textBox1);
Возникли следующие вопросы: -возможно ли убрать из вызова процедуры имя объекта, если да, то как? -Если у меня много TextBox'ов, можно ли не писать для каждого объекта, что он делает при событии KeyPress, а, например, автоматически вызывать процедуру Blok при каждой нажатой кнопке? и есть ли в этом смысл?

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

textual
Листинг программы
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;
        }
 
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы