浓缩了大量的按钮点击事件

本文关键字:按钮 事件 | 更新日期: 2023-09-27 18:24:25

我有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;
    }
  }
}

我认为一种方法是把它放在一个数组中,每当点击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种类似的方法,所以可以使用Expression体方法。您必须拥有C#才能使用此功能。

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