无论如何要概括 winForm 组件的 eventHandlers

Is there anyway to generalize eventHandlers for winForm components

我必须创建 6 个只接受数字的文本框。为此,我使用了 keyPress 事件。但是我必须重复相同的 eventHandler 代码 6 次,这只是 formComponent 的名称有所不同。任何人都可以解释如何减少代码的大小吗?请。代码是

   private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (char.IsDigit(e.KeyChar) || (e.KeyChar == (char)Keys.Back) || e.KeyChar == '.' && !textBox1.Text.Contains('.'))
        {
            return;
        }
        else if (e.KeyChar == (char)Keys.Back)
        {
            return;
        }
        else if (e.KeyChar == '.' && !textBox1.Text.Contains('.'))
        {
            return;
        }
        else
        {
            e.Handled = true;
            Console.Beep(1000, 500);
            MessageBox.Show("Only numbers allowed!","Error");
        }
     }

    private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (char.IsDigit(e.KeyChar) || (e.KeyChar == (char)Keys.Back) || e.KeyChar == '.' && !textBox1.Text.Contains('.'))
        {
            return;
        }
        else if (e.KeyChar == (char)Keys.Back)
        {
            return;
        }
        else if (e.KeyChar == '.' && !textBox1.Text.Contains('.'))
        {
            return;
        }
        else
        {
            e.Handled = true;
            Console.Beep(1000, 500);
            MessageBox.Show("Only numbers allowed!", "Error");
        }
    }     AND THIS REPEATS FOR 4 MORE TIMES

您可以订阅相同的方法并将 sender 对象转换为特定控件,这里是您的代码示例:

private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
    var textBox=(TextBox)sender; //text box which raised the event

    if (char.IsDigit(e.KeyChar) || (e.KeyChar == (char)Keys.Back) || e.KeyChar == '.' && !textBox.Text.Contains('.'))
    {
        return;
    }
    else if (e.KeyChar == (char)Keys.Back)
    {
        return;
    }
    else if (e.KeyChar == '.' && !textBox.Text.Contains('.'))
    {
        return;
    }
    else
    {
        e.Handled = true;
        Console.Beep(1000, 500);
        MessageBox.Show("Only numbers allowed!","Error");
    }
 }

正在订阅活动:

textBox1.KeyPress+=textBox_KeyPress;
textBox2.KeyPress+=textBox_KeyPress;
...

或者您可以 select 对来自 IDE

中的 属性 网格的 KeyPress 事件使用相同的方法

我已经通过这种方式调用了事件函数。

    private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
    {
       textBox_KeyPress(sender,e);
    }