简化多个 TextBox 控件的 TextChange 事件处理程序

Simplifying TextChange Event Handler for Multiple TextBox controls

我只是想知道是否可以简化这些代码?我有多个具有相同文本更改事件的文本框

    private void txtOvertimeHours_TextChanged(object sender, EventArgs e)
    {
        if (txtOvertimeHours.Text.Length <= 0 || 
            txtOvertimeHours.Text == null || 
            txtOvertimeHours.Text == "0.00" || 
            txtOvertimeHours.Text == "0" || 
            txtOvertimeHours.Text == "0.0")
        {
            txtOvertimeHours.Text = "0.00";
        }

    }

    private void txtAllowance_TextChanged(object sender, EventArgs e)
    {
        if (txtAllowance.Text.Length <= 0 ||
            txtAllowance.Text == null ||
            txtAllowance.Text == "0.00" ||
            txtAllowance.Text == "0" ||
            txtAllowance.Text == "0.0")
        {
            txtAllowance.Text = "0.00";
        }
    }

//以此类推

private void txtOvertimeHours_TextChanged(object sender, EventArgs e)
{
    ZeroOutTextBox(txtOvertimeHours);
}

private void txtAllowance_TextChanged(object sender, EventArgs e)
{
    ZeroOutTextBox(txtAllowance);
}

private void ZeroOutTextBox(Textbox txt)
{
    if (txt.Text.Length <= 0 ||
        txt.Text == null ||
        txt.Text == "0.00" ||
        txt.Text == "0" ||
        txt.Text == "0.0")
    {
        txt.Text = "0.00";
    }
}

另一种方式。您可以对多个事件使用相同的事件处理程序:

private void ZeroOutTextBox_TextChanged(object sender, EventArgs e)
{
    TextBox txt = (TextBox) sender;

    if (txt.Text.Length <= 0 ||
        txt.Text == null ||
        txt.Text == "0.00" ||
        txt.Text == "0" ||
        txt.Text == "0.0")
    {
        txt.Text = "0.00";
    }
}

您或许还可以简化条件语句。我还没有测试下面的代码:

private void ZeroOutTextBox_TextChanged(object sender, EventArgs e)
{
    decimal result;
    TextBox txt = (TextBox) sender;

    if (String.IsNullOrWhitespace(txt.Text) ||
        (decimal.TryParse(txt.Text, out result) && result == 0M))
    {
        txt.Text = "0.00";
    }
}