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