简化C#代码,使其更易于管理

简化C#代码,使其更易于管理,c#,C#,我将如何简化下面的代码,以便随着时间的推移更易于管理 private void btn1_Click(object sender, EventArgs e) { if(remainTxt.BackColor == Color.FromArgb(245, 244, 162)) { remainTxt.AppendText("1"); } else if (totalTxt.BackColor =

我将如何简化下面的代码,以便随着时间的推移更易于管理

    private void btn1_Click(object sender, EventArgs e)
    {
        if(remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText("1");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText("1");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText("1");
        }
    }

    private void btn2_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText("2");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText("2");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText("2");
        }
    }

    private void btn3_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText("3");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText("3");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText("3");
        }
    }

    private void btn4_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText("4");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText("4");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText("4");
        }
    }

    private void btn5_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText("5");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText("5");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText("5");
        }
    }

    private void btn6_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText("6");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText("6");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText("6");
        }
    }

    private void btn7_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText("7");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText("7");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText("7");
        }
    }

    private void btn8_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText("8");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText("8");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText("8");
        }
    }

    private void btn9_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText("9");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText("9");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText("9");
        }
    }

    private void btn0_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText("0");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText("0");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText("0");
        }
    }

    private void btndot_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.AppendText(".");
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.AppendText(".");
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.AppendText(".");
        }
    }

    private void btnback_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.Text = remainTxt.Text.Remove(remainTxt.Text.Length - 1, 1);
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.Text = totalTxt.Text.Remove(totalTxt.Text.Length - 1, 1);
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.Text = paidTxt.Text.Remove(paidTxt.Text.Length - 1, 1);
        }
    }

    private void btnreset_Click(object sender, EventArgs e)
    {
        if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            remainTxt.Text = "";
        }
        else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            totalTxt.Text = "";
        }
        else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
        {
            paidTxt.Text = "";
        }
    }

您可以尝试使用Switch语句,它们将使它更干净


您可以尝试使用Switch语句,它们将使它更干净


您可以尝试使用Switch语句,它们将使它更干净


您可以尝试使用Switch语句,它们将使它更干净


您可以将逻辑提取到单独的方法中:

private void AppendValue(string valueToAppend)
{
    if(remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        remainTxt.AppendText(valueToAppend);
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        totalTxt.AppendText(valueToAppend);
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        paidTxt.AppendText(valueToAppend);
    }
}
然后从每个单击事件调用它:

private void btn1_Click(object sender, EventArgs e)
{
    AppendValue("1");
}

除了
btnback\u Click
事件之外,这应该适用于所有情况,但是您可以自己处理该方法,而无需调用
AppendValue

,您可以将逻辑提取到单独的方法中:

private void AppendValue(string valueToAppend)
{
    if(remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        remainTxt.AppendText(valueToAppend);
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        totalTxt.AppendText(valueToAppend);
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        paidTxt.AppendText(valueToAppend);
    }
}
private var conditionColor = Color.FromArgb(245, 244, 162);

private void btn1_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("1");
}

private void btn2_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("2");
}

private void btn3_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("3");
}

private void btn4_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("4");
}

private void btn5_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("5");
}

private void btn6_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("6");
}

private void btn7_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("7");
}

private void btn8_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("8");
}

private void btn9_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("9");
}

private void btn0_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("0");
}

private void btndot_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields(".");
}

private void btnback_Click(object sender, EventArgs e)
{
    if (remainTxt.BackColor == conditionColor)
    {
        remainTxt.Text = remainTxt.Text.Remove(remainTxt.Text.Length - 1, 1);
    }
    else if (totalTxt.BackColor == conditionColor)
    {
        totalTxt.Text = totalTxt.Text.Remove(totalTxt.Text.Length - 1, 1);
    }
    else if (paidTxt.BackColor == conditionColor)
    {
        paidTxt.Text = paidTxt.Text.Remove(paidTxt.Text.Length - 1, 1);
    }
}

private void btnreset_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("");
}

private CheckAndUpdateTextFields(string textToAppend)
{
   if(remainTxt.BackColor == conditionColor)
   {
       remainTxt.AppendText(textToAppend);
   }
   else if (totalTxt.BackColor == conditionColor)
   {
       totalTxt.AppendText(textToAppend);
   }
   else if (paidTxt.BackColor == conditionColor )
   {
       paidTxt.AppendText(textToAppend);
   }
}
然后从每个单击事件调用它:

private void btn1_Click(object sender, EventArgs e)
{
    AppendValue("1");
}

除了
btnback\u Click
事件之外,这应该适用于所有情况,但是您可以自己处理该方法,而无需调用
AppendValue

,您可以将逻辑提取到单独的方法中:

private void AppendValue(string valueToAppend)
{
    if(remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        remainTxt.AppendText(valueToAppend);
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        totalTxt.AppendText(valueToAppend);
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        paidTxt.AppendText(valueToAppend);
    }
}
private var conditionColor = Color.FromArgb(245, 244, 162);

private void btn1_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("1");
}

private void btn2_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("2");
}

private void btn3_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("3");
}

private void btn4_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("4");
}

private void btn5_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("5");
}

private void btn6_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("6");
}

private void btn7_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("7");
}

private void btn8_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("8");
}

private void btn9_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("9");
}

private void btn0_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("0");
}

private void btndot_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields(".");
}

private void btnback_Click(object sender, EventArgs e)
{
    if (remainTxt.BackColor == conditionColor)
    {
        remainTxt.Text = remainTxt.Text.Remove(remainTxt.Text.Length - 1, 1);
    }
    else if (totalTxt.BackColor == conditionColor)
    {
        totalTxt.Text = totalTxt.Text.Remove(totalTxt.Text.Length - 1, 1);
    }
    else if (paidTxt.BackColor == conditionColor)
    {
        paidTxt.Text = paidTxt.Text.Remove(paidTxt.Text.Length - 1, 1);
    }
}

private void btnreset_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("");
}

private CheckAndUpdateTextFields(string textToAppend)
{
   if(remainTxt.BackColor == conditionColor)
   {
       remainTxt.AppendText(textToAppend);
   }
   else if (totalTxt.BackColor == conditionColor)
   {
       totalTxt.AppendText(textToAppend);
   }
   else if (paidTxt.BackColor == conditionColor )
   {
       paidTxt.AppendText(textToAppend);
   }
}
然后从每个单击事件调用它:

private void btn1_Click(object sender, EventArgs e)
{
    AppendValue("1");
}

除了
btnback\u Click
事件之外,这应该适用于所有情况,但是您可以自己处理该方法,而无需调用
AppendValue

,您可以将逻辑提取到单独的方法中:

private void AppendValue(string valueToAppend)
{
    if(remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        remainTxt.AppendText(valueToAppend);
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        totalTxt.AppendText(valueToAppend);
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        paidTxt.AppendText(valueToAppend);
    }
}
private var conditionColor = Color.FromArgb(245, 244, 162);

private void btn1_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("1");
}

private void btn2_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("2");
}

private void btn3_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("3");
}

private void btn4_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("4");
}

private void btn5_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("5");
}

private void btn6_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("6");
}

private void btn7_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("7");
}

private void btn8_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("8");
}

private void btn9_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("9");
}

private void btn0_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("0");
}

private void btndot_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields(".");
}

private void btnback_Click(object sender, EventArgs e)
{
    if (remainTxt.BackColor == conditionColor)
    {
        remainTxt.Text = remainTxt.Text.Remove(remainTxt.Text.Length - 1, 1);
    }
    else if (totalTxt.BackColor == conditionColor)
    {
        totalTxt.Text = totalTxt.Text.Remove(totalTxt.Text.Length - 1, 1);
    }
    else if (paidTxt.BackColor == conditionColor)
    {
        paidTxt.Text = paidTxt.Text.Remove(paidTxt.Text.Length - 1, 1);
    }
}

private void btnreset_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("");
}

private CheckAndUpdateTextFields(string textToAppend)
{
   if(remainTxt.BackColor == conditionColor)
   {
       remainTxt.AppendText(textToAppend);
   }
   else if (totalTxt.BackColor == conditionColor)
   {
       totalTxt.AppendText(textToAppend);
   }
   else if (paidTxt.BackColor == conditionColor )
   {
       paidTxt.AppendText(textToAppend);
   }
}
然后从每个单击事件调用它:

private void btn1_Click(object sender, EventArgs e)
{
    AppendValue("1");
}

除了
btnback\u Click
事件之外,这应该适用于您的所有情况,但是您可以自己处理该方法,而无需调用
AppendValue
首先定义一个方法,该方法接受具有您要执行的操作的委托:

private var conditionColor = Color.FromArgb(245, 244, 162);

private void btn1_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("1");
}

private void btn2_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("2");
}

private void btn3_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("3");
}

private void btn4_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("4");
}

private void btn5_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("5");
}

private void btn6_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("6");
}

private void btn7_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("7");
}

private void btn8_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("8");
}

private void btn9_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("9");
}

private void btn0_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("0");
}

private void btndot_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields(".");
}

private void btnback_Click(object sender, EventArgs e)
{
    if (remainTxt.BackColor == conditionColor)
    {
        remainTxt.Text = remainTxt.Text.Remove(remainTxt.Text.Length - 1, 1);
    }
    else if (totalTxt.BackColor == conditionColor)
    {
        totalTxt.Text = totalTxt.Text.Remove(totalTxt.Text.Length - 1, 1);
    }
    else if (paidTxt.BackColor == conditionColor)
    {
        paidTxt.Text = paidTxt.Text.Remove(paidTxt.Text.Length - 1, 1);
    }
}

private void btnreset_Click(object sender, EventArgs e)
{
    CheckAndUpdateTextFields("");
}

private CheckAndUpdateTextFields(string textToAppend)
{
   if(remainTxt.BackColor == conditionColor)
   {
       remainTxt.AppendText(textToAppend);
   }
   else if (totalTxt.BackColor == conditionColor)
   {
       totalTxt.AppendText(textToAppend);
   }
   else if (paidTxt.BackColor == conditionColor )
   {
       paidTxt.AppendText(textToAppend);
   }
}
static void DoEventually(Action<T> action) where T: TextBox
{
    if(remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(remainTxt);
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(totalTxt);
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(paidTxt);
    } 
}

首先定义一个方法,该方法接受具有要执行的操作的委托:

static void DoEventually(Action<T> action) where T: TextBox
{
    if(remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(remainTxt);
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(totalTxt);
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(paidTxt);
    } 
}

首先定义一个方法,该方法接受具有要执行的操作的委托:

static void DoEventually(Action<T> action) where T: TextBox
{
    if(remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(remainTxt);
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(totalTxt);
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(paidTxt);
    } 
}

首先定义一个方法,该方法接受具有要执行的操作的委托:

static void DoEventually(Action<T> action) where T: TextBox
{
    if(remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(remainTxt);
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(totalTxt);
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        action(paidTxt);
    } 
}

格兰特写道,将类似的逻辑转移到可重用的方法中。您甚至可以使用单个事件处理程序并将值作为CommandArgument发送


其次,永远不要编写依赖于某种形式的UI组件(如颜色)的业务规则。颜色很可能会随着时间的推移而改变,代码也会被破坏。相反,添加一些其他字段以保持表单状态作为授权写入,将类似的逻辑移到可重用方法中。您甚至可以使用单个事件处理程序并将值作为CommandArgument发送


其次,永远不要编写依赖于某种形式的UI组件(如颜色)的业务规则。颜色很可能会随着时间的推移而改变,代码也会被破坏。相反,添加一些其他字段以保持表单状态作为授权写入,将类似的逻辑移到可重用方法中。您甚至可以使用单个事件处理程序并将值作为CommandArgument发送


其次,永远不要编写依赖于某种形式的UI组件(如颜色)的业务规则。颜色很可能会随着时间的推移而改变,代码也会被破坏。相反,添加一些其他字段以保持表单状态作为授权写入,将类似的逻辑移到可重用方法中。您甚至可以使用单个事件处理程序并将值作为CommandArgument发送


其次,永远不要编写依赖于某种形式的UI组件(如颜色)的业务规则。颜色很可能会随着时间的推移而改变,代码也会被破坏。相反,添加一些其他字段以保持表单状态

将操作类型定义为枚举,以后可以扩展:

enum TextAction
{
    Clear,
    Append,
    RemoveLast
}

private void FormatText(TextAction action, string value = null)
{
    var textBox = DetermineTextBox();

    if (textBox != null)
    {
        switch (action)
        {
            case TextAction.Append :
                textBox.Text = value;
                break;
            case TextAction.Clear:
                textBox.Text = "";
                break;
            case TextAction.RemoveLast:
                textBox.Text = textBox.Text.Remove(textBox.Text.Length - 1, 1);
                break;

            default:
                break;
        }
    }
}

private TextBox DetermineTextBox()
{
    if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return remainTxt;
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return totalTxt;
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return paidTxt;
    }

    return null;
}

private void btn1_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "1");
}

private void btn2_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "2");
}

private void btn3_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "3");
}

private void btn4_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "4");
}

private void btn5_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "5");
}

private void btn6_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "6");
}

private void btn7_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "7");
}

private void btn8_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "8");
}

private void btn9_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "9");
}

private void btn0_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "0");
}

private void btndot_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, ".");
}

private void btnback_Click(object sender, EventArgs e)
{
    FormatText(TextAction.RemoveLast);
}

private void btnreset_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Clear);
}

将操作类型定义为枚举,以后可以扩展:

enum TextAction
{
    Clear,
    Append,
    RemoveLast
}

private void FormatText(TextAction action, string value = null)
{
    var textBox = DetermineTextBox();

    if (textBox != null)
    {
        switch (action)
        {
            case TextAction.Append :
                textBox.Text = value;
                break;
            case TextAction.Clear:
                textBox.Text = "";
                break;
            case TextAction.RemoveLast:
                textBox.Text = textBox.Text.Remove(textBox.Text.Length - 1, 1);
                break;

            default:
                break;
        }
    }
}

private TextBox DetermineTextBox()
{
    if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return remainTxt;
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return totalTxt;
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return paidTxt;
    }

    return null;
}

private void btn1_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "1");
}

private void btn2_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "2");
}

private void btn3_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "3");
}

private void btn4_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "4");
}

private void btn5_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "5");
}

private void btn6_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "6");
}

private void btn7_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "7");
}

private void btn8_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "8");
}

private void btn9_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "9");
}

private void btn0_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "0");
}

private void btndot_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, ".");
}

private void btnback_Click(object sender, EventArgs e)
{
    FormatText(TextAction.RemoveLast);
}

private void btnreset_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Clear);
}

将操作类型定义为枚举,以后可以扩展:

enum TextAction
{
    Clear,
    Append,
    RemoveLast
}

private void FormatText(TextAction action, string value = null)
{
    var textBox = DetermineTextBox();

    if (textBox != null)
    {
        switch (action)
        {
            case TextAction.Append :
                textBox.Text = value;
                break;
            case TextAction.Clear:
                textBox.Text = "";
                break;
            case TextAction.RemoveLast:
                textBox.Text = textBox.Text.Remove(textBox.Text.Length - 1, 1);
                break;

            default:
                break;
        }
    }
}

private TextBox DetermineTextBox()
{
    if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return remainTxt;
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return totalTxt;
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return paidTxt;
    }

    return null;
}

private void btn1_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "1");
}

private void btn2_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "2");
}

private void btn3_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "3");
}

private void btn4_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "4");
}

private void btn5_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "5");
}

private void btn6_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "6");
}

private void btn7_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "7");
}

private void btn8_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "8");
}

private void btn9_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "9");
}

private void btn0_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "0");
}

private void btndot_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, ".");
}

private void btnback_Click(object sender, EventArgs e)
{
    FormatText(TextAction.RemoveLast);
}

private void btnreset_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Clear);
}

将操作类型定义为枚举,以后可以扩展:

enum TextAction
{
    Clear,
    Append,
    RemoveLast
}

private void FormatText(TextAction action, string value = null)
{
    var textBox = DetermineTextBox();

    if (textBox != null)
    {
        switch (action)
        {
            case TextAction.Append :
                textBox.Text = value;
                break;
            case TextAction.Clear:
                textBox.Text = "";
                break;
            case TextAction.RemoveLast:
                textBox.Text = textBox.Text.Remove(textBox.Text.Length - 1, 1);
                break;

            default:
                break;
        }
    }
}

private TextBox DetermineTextBox()
{
    if (remainTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return remainTxt;
    }
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return totalTxt;
    }
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162))
    {
        return paidTxt;
    }

    return null;
}

private void btn1_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "1");
}

private void btn2_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "2");
}

private void btn3_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "3");
}

private void btn4_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "4");
}

private void btn5_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "5");
}

private void btn6_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "6");
}

private void btn7_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "7");
}

private void btn8_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "8");
}

private void btn9_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "9");
}

private void btn0_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, "0");
}

private void btndot_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Append, ".");
}

private void btnback_Click(object sender, EventArgs e)
{
    FormatText(TextAction.RemoveLast);
}

private void btnreset_Click(object sender, EventArgs e)
{
    FormatText(TextAction.Clear);
}

我将把按钮索引和背景颜色映射到字符串和附加的规则封装在一个单独的类中(甚至更好的接口)。这可能是这样的:

public class ColorRules
{
    private IEnumerable<ColorRuleEntry> _rules;

    public ColorRules()
    {
        _rules = InitialColorRules();
    }

    private IEnumerable<ColorRuleEntry> InitialColorRules()
    {
        yield return new ColorRuleEntry(1, Color.FromArgb(245, 244, 162), "1");
        yield return new ColorRuleEntry(2, Color.FromArgb(245, 244, 162), "2");
        yield return new ColorRuleEntry(3, Color.FromArgb(245, 244, 162), "3");
        yield return new ColorRuleEntry(4, Color.FromArgb(245, 244, 162), "4");
        // and so on
    }

    public bool TryGetResult(int button, Color backgroundColor, out String result)
    {
        var entry = _rules.FirstOrDefault(e => e.Button == button && e.Color.Equals(backgroundColor));
        if (entry == null)
        {
            result = null;
            return false;
        }

        result = entry.Result;
        return true;
    }

    protected class ColorRuleEntry
    {
        public ColorRuleEntry(int button, Color color, String result)
        {
            Button = button;
            Color = color;
            Result = result;
        }

        public Color Color { get; protected set; }
        public int Button { get; protected set; }
        public String Result { get; protected set; }
    }
}

我将把按钮索引和背景颜色映射到字符串和附加的规则封装在一个单独的类中(甚至更好的接口)。这可能是这样的:

public class ColorRules
{
    private IEnumerable<ColorRuleEntry> _rules;

    public ColorRules()
    {
        _rules = InitialColorRules();
    }

    private IEnumerable<ColorRuleEntry> InitialColorRules()
    {
        yield return new ColorRuleEntry(1, Color.FromArgb(245, 244, 162), "1");
        yield return new ColorRuleEntry(2, Color.FromArgb(245, 244, 162), "2");
        yield return new ColorRuleEntry(3, Color.FromArgb(245, 244, 162), "3");
        yield return new ColorRuleEntry(4, Color.FromArgb(245, 244, 162), "4");
        // and so on
    }

    public bool TryGetResult(int button, Color backgroundColor, out String result)
    {
        var entry = _rules.FirstOrDefault(e => e.Button == button && e.Color.Equals(backgroundColor));
        if (entry == null)
        {
            result = null;
            return false;
        }

        result = entry.Result;
        return true;
    }

    protected class ColorRuleEntry
    {
        public ColorRuleEntry(int button, Color color, String result)
        {
            Button = button;
            Color = color;
            Result = result;
        }

        public Color Color { get; protected set; }
        public int Button { get; protected set; }
        public String Result { get; protected set; }
    }
}

我将把按钮索引和背景颜色映射到字符串和附加的规则封装在一个单独的类中(甚至更好的接口)。这可能是这样的:

public class ColorRules
{
    private IEnumerable<ColorRuleEntry> _rules;

    public ColorRules()
    {
        _rules = InitialColorRules();
    }

    private IEnumerable<ColorRuleEntry> InitialColorRules()
    {
        yield return new ColorRuleEntry(1, Color.FromArgb(245, 244, 162), "1");
        yield return new ColorRuleEntry(2, Color.FromArgb(245, 244, 162), "2");
        yield return new ColorRuleEntry(3, Color.FromArgb(245, 244, 162), "3");
        yield return new ColorRuleEntry(4, Color.FromArgb(245, 244, 162), "4");
        // and so on
    }

    public bool TryGetResult(int button, Color backgroundColor, out String result)
    {
        var entry = _rules.FirstOrDefault(e => e.Button == button && e.Color.Equals(backgroundColor));
        if (entry == null)
        {
            result = null;
            return false;
        }

        result = entry.Result;
        return true;
    }

    protected class ColorRuleEntry
    {
        public ColorRuleEntry(int button, Color color, String result)
        {
            Button = button;
            Color = color;
            Result = result;
        }

        public Color Color { get; protected set; }
        public int Button { get; protected set; }
        public String Result { get; protected set; }
    }
}

我将把按钮索引和背景颜色映射到字符串和附加的规则封装在一个单独的类中(甚至更好的接口)。这可能是这样的:

public class ColorRules
{
    private IEnumerable<ColorRuleEntry> _rules;

    public ColorRules()
    {
        _rules = InitialColorRules();
    }

    private IEnumerable<ColorRuleEntry> InitialColorRules()
    {
        yield return new ColorRuleEntry(1, Color.FromArgb(245, 244, 162), "1");
        yield return new ColorRuleEntry(2, Color.FromArgb(245, 244, 162), "2");
        yield return new ColorRuleEntry(3, Color.FromArgb(245, 244, 162), "3");
        yield return new ColorRuleEntry(4, Color.FromArgb(245, 244, 162), "4");
        // and so on
    }

    public bool TryGetResult(int button, Color backgroundColor, out String result)
    {
        var entry = _rules.FirstOrDefault(e => e.Button == button && e.Color.Equals(backgroundColor));
        if (entry == null)
        {
            result = null;
            return false;
        }

        result = entry.Result;
        return true;
    }

    protected class ColorRuleEntry
    {
        public ColorRuleEntry(int button, Color color, String result)
        {
            Button = button;
            Color = color;
            Result = result;
        }

        public Color Color { get; protected set; }
        public int Button { get; protected set; }
        public String Result { get; protected set; }
    }
}


关于工作代码的问题最好发布到codereview.stackexchange.com。(但试着提取问题的实质,看看是否已经有类似的问题。)关于工作代码的问题最好发布到codereview.stackexchange.com。(但试着提取问题的实质,看看是否已经有类似的问题。)关于工作代码的问题最好发布到codereview.stackexchange.com。(但试着提取问题的实质,看看是否已经有类似的问题。)关于工作代码的问题最好发布到codereview.stackexchange.com。(但试着从你的问题中提取精华,看看是否已经有这样的问题。)不要真的认为这是一个有用的答案。不要真的认为这是一个有用的回答。我个人唯一真正的建议是使用switch语句使其更具可读性。switch语句有何帮助?很明显,OP是新的,所以说“使用开关”是非常模糊的。正确的答案是将功能抽象到每个处理程序将调用的另一个方法中。不是“使用开关”。如果没有看到表单设计,它将完全基于推测,因此很难确定如何进行。在意识到这一点之前,我确实起草了几行代码