反正有没有为winForm组件概括eventHandlers

时间:2015-01-02 06:21:33

标签: c# .net winforms

我必须创建6个仅接受数字的textBoxes。我为此目的使用了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

2 个答案:

答案 0 :(得分:4)

您可以订阅相同的方法并将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;
...

或者您可以从IDE中的Property Grid为KeyPress事件选择相同的方法

答案 1 :(得分:0)

我以这种方式调用了事件函数。

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