C# 压缩大量的按钮点击事件

C# 压缩大量的按钮点击事件,c#,refactoring,C#,Refactoring,我有40个按钮,它们在点击时都会做一些稍微不同的事情,如果可以的话,我想把它浓缩一下。我还想说,如果单击其中一个按钮,则创建一个可由类访问的时间戳 以下是40个按钮中的2个按钮的代码: private void Btn1_Click(object sender, RoutedEventArgs e) { for (int i = 1; i < 5; i++) { CheckBox CheckBox = (this.FindName(string.Format("C

我有40个按钮,它们在点击时都会做一些稍微不同的事情,如果可以的话,我想把它浓缩一下。我还想说,如果单击其中一个按钮,则创建一个可由类访问的时间戳

以下是40个按钮中的2个按钮的代码:

private void Btn1_Click(object sender, RoutedEventArgs e)
{
   for (int i = 1; i < 5; i++)
   {
       CheckBox CheckBox = (this.FindName(string.Format("Check{0}", i)) as CheckBox);

       if (CheckBox != null)
       {
          CheckBox.IsChecked = true;
       }
    }
}

private void BtnDisable1_Click(object sender, RoutedEventArgs e)
{
  for (int i = 1; i < 5; i++)
  {
    CheckBox CheckBox1 = (this.FindName(string.Format("Check_D{0}", i)) as CheckBox);

    if (CheckBox1 != null)
    {
       CheckBox1.IsChecked = false;
    }
  }
}
private void Btn1\u单击(对象发送方,路由目标)
{
对于(int i=1;i<5;i++)
{
复选框=(this.FindName(string.Format(“Check{0}”,i))作为复选框);
如果(复选框!=null)
{
CheckBox.IsChecked=true;
}
}
}
私有无效BtnDisable1_单击(对象发送者,路由目标e)
{
对于(int i=1;i<5;i++)
{
复选框CheckBox1=(this.FindName(string.Format(“Check_{0}”,i))作为复选框);
如果(复选框1!=null)
{
CheckBox1.IsChecked=false;
}
}
}

我认为一种方法是把它放在一个数组中,每当点击40个按钮中的一个时,它就会在数组中查找下一步要做什么?我不太确定,谢谢

您可以使用一种方法简化此过程

答案根据讨论更新

private void DoWork(int checkboxGroup, bool enable)
{
    int start = checkboxGroup * 4;
    for (int i = start; i < start + 4; i++)
    {
        CheckBox CheckBox = this.FindName("CheckBox" + i) as CheckBox;

        if (CheckBox != null)
        {
            CheckBox.IsChecked = enable;
        }
    }
}

private void Btn1_Click(object sender, RoutedEventArgs e)
{
    DoWork(1 , true);
}
private void BtnDisable1_Click(object sender, RoutedEventArgs e)
{
    DoWork(1 , false);
}

请避免在每行之间添加额外的空格。它们只是让代码更难阅读。我刚刚编辑了你的问题并删除了它们。(我无法想象有40个按钮会是什么样子!)。无论如何,你可以使用方法来实现这个目的,并将函数传递给它们。但是BtnDisable1使用了一个不同的字符串检查器,它检查“Check_D”。哦。我没看见。等等,我来修。@TomPitts看看编辑。我建议你拿出你的确切案例(如果你还没有)。因为使用代理有时很棘手。你怎么能阅读关于它们的教程。它们可以在互联网上找到。例如,我遇到的另一个问题是,当您单击按钮时,它应该启用或禁用多个复选框。每个复选框都被称为:复选框、复选框1、复选框2等等。每个按钮有4个复选框。我编辑了您的代码,如您所见,我希望通过搜索所有名为:CheckBox(I)的复选框来启用复选框1-4,其中我在for循环中。然后,我想根据是否单击了启用按钮或禁用按钮来启用或禁用它们。
private void Btn1_Click(object sender, RoutedEventArgs e) => DoWork(1 , true);
private void BtnDisable1_Click(object sender, RoutedEventArgs e) => DoWork(1 , false);

private void Btn2_Click(object sender, RoutedEventArgs e) => DoWork(2, true);
private void BtnDisable2_Click(object sender, RoutedEventArgs e) => DoWork(2, false);

// and so on