如何将类似的事件处理程序添加到多个表单? I.E. keypressed事件到多个文本框

时间:2014-11-10 01:56:57

标签: c# event-handling keyboard-events

我已遵循本指南

How do I make a textbox that only accepts numbers?

提供的方法限制了我们可以在框中输入的字符

private void textBox18_KeyPress_1(object sender, KeyPressEventArgs e)
    {
         if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
            (e.KeyChar != ','))
        {
            e.Handled = true;
        }

        // only allow one decimal point
         if ((e.KeyChar == ',') && ((sender as TextBox).Text.IndexOf(',') > -1))
         {
             e.Handled = true;
         }
    }

它工作得很好,但有一个问题,我必须将事件处理程序添加到100多个文本框中。有更简单的方法吗?因为它包含了designer.cs和cs。

我正在研究winform,visual c#2010 express edition

2 个答案:

答案 0 :(得分:1)

您可以在FormLoad方法中执行此操作:

textBox19.KeyPress += textBox18_KeyPress_1;
textBox20.KeyPress += textBox18_KeyPress_1;
textBox21.KeyPress += textBox18_KeyPress_1;
textBox22.KeyPress += textBox18_KeyPress_1;
textBox23.KeyPress += textBox18_KeyPress_1;
// etc
textBox999.KeyPress += textBox18_KeyPress_1;

答案 1 :(得分:1)

将当前的textBox__KeyPress_1重命名为更具描述性的内容。

例如。 GenericTextBoxKeyPress

然后,在构造函数(在InitComponents之后)或Form Load中,您可以逐个或使用循环将这些事件添加到文本框中。

//One by one
textBox1.KeyPress += GenericTextBoxKeyPress;
textBox2.KeyPress += GenericTextBoxKeyPress;
textBox3.KeyPress += GenericTextBoxKeyPress;

//All TextBoxes in your form
foreach(var textbox in this.Controls.OfType<TextBox>())
{
    textbox.KeyPress += GenericTextBoxKeyPress;
}

或者,您可以创建一个实现TextBox的类并覆盖OnKeyPress行为。然后,更改所有TextBox以使用此新类。

using System.Windows.Forms;

namespace MyApplication
{
    class MyTextBox : TextBox
    {
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
            (e.KeyChar != ','))
            {
                e.Handled = true;
            }

            // only allow one decimal point
            if ((e.KeyChar == ',') && Text.IndexOf(',') > -1)
            {
                e.Handled = true;
            }
            base.OnKeyPress(e);
        }
    }
}