2015-11-26 3 views
2

У меня есть 40 кнопок, которые все делают что-то немного другое при нажатии, я хотел бы сконденсировать это, если смогу. Я также хочу сказать, что если нажать одну из кнопок, создайте временную метку, к которой может получить доступ класс.Конденсационные партии кнопок Нажмите События

Вот код 2 из 40 кнопок:

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 кнопок щелкнул это выглядит в массив, что делать дальше? Я не уверен, спасибо!

+0

Пожалуйста, избегайте лишних пробелов между каждой линией. они просто делают код сложнее читать. Я только что редактировал ваш вопрос и удалял их (я не могу представить, как это будет выглядеть с помощью 40 кнопок!). в любом случае вы можете использовать методы для этой цели и передавать им функции. –

ответ

1

Вы можете сделать это простым, используя один метод.

Ответ обновляется на основе this обсуждения

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# 6.

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 
+0

Но BtnDisable1 использует другую проверку строки, она проверяет «Check_D». –

+0

Ох. не видел. подождите, я исправлю это. –

+0

Большое спасибо! :) –

Смежные вопросы