如何将类似的事件处理程序添加到多个表单?即,将事件按到多个文本框中



我遵循了指南

如何制作一个只接受数字的文本框?

提供的方法限制了我们可以在盒子上输入的字符

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,可视化c#2010快速版

您可以在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;

将当前textBox18_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);
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新