2014-09-19 3 views
0

Возможно ли перегрузить обработчик событий параметрами? Если нет, то каков наилучший способ прохождения дополнительных 3 параметров?Перегрузка обработчика событий тремя дополнительными параметрами

я получаю сообщение об ошибке:

Вот картина того, что я пытаюсь достичь:

MainWindow.xaml.cs

public bool DotControl { get; set; } 
    public int Count { get; set; } 
    TextBox Tb = Keyboard.FocusedElement as TextBox; 

    private void RemoveLastButton_Click(object sender, RoutedEventArgs e, bool DotControl, int Count, TextBox tb) 
    { 
     if (Tb != null && Tb != DriverTextBox) 
     { 
      try 
      { 
       var keypadObject = new Keypad(); 
       keypadObject.RemoveLast(Tb, DotControl, Count); 
      } 
      catch (Exception) 
      { 
       TotalTextBox.Focus(); 
      } 
     } 
     else 
     { 
      TotalTextBox.Focus(); 
     } 
    } 

    private void ResetButton_Click(object sender, RoutedEventArgs e, bool DotControl, int Count, TextBox tb) 
    { 
     if (Tb != null && Tb != DriverTextBox) 
     { 
      try 
      {    
       var keypadObject = new Keypad(); 
       keypadObject.Reset(Tb, DotControl, Count); 
      } 
      catch (Exception) 
      { 
       TotalTextBox.Focus(); 
      } 
     } 
     else 
     { 
      TotalTextBox.Focus(); 
     } 
    } 

Keypad.cs

// Backspace textbox 
    public void RemoveLast(TextBox tb, bool dotControl, int count) 
    { 
     if (tb.Text.Length > 0) 
     { 
      if (char.IsDigit(tb.Text[tb.Text.Length - 1])) count = 0; 
      else 
      { 
       dotControl = false; 
       count = 0; 
      } 
      tb.Text = tb.Text.Remove(tb.Text.Length - 1, 1); 
     } 
    } 

    // Clear textbox 
    public void Reset(TextBox tb, bool dotControl, int count) 
    { 
     dotControl = false; 
     count = 0; 
     tb.Text = ""; 
    } 
+2

Обработчики событий AFAIK имеют определенные подписи - почему бы вам просто не вызвать свой собственный метод из обработчика событий? Вы можете передать то, что вам нравится. – Mashton

+0

Я думаю, что 'dotControl' и' Count' должны быть полями/свойствами –

+0

@JeroenvanLangen - спасибо, вопрос обновлен, моя логика правильная? – methuselah

ответ

3

Обработчики событий имеют определенные подписи, поэтому вызовите свой собственный метод из обработчика событий. Например:

private void RemoveLastButton_Click(object sender, RoutedEventArgs e) 
{ 
    RemoveLastButton(DotControl, Count, tb) 
} 


private void RemoveLastButton(bool DotControl, int Count, TextBox tb) 
{ 
    if (Tb != null && Tb != DriverTextBox) 
    { 
     try 
     { 
      var keypadObject = new Keypad(); 
      keypadObject.RemoveLast(Tb, DotControl, Count); 
     } 
     catch (Exception) 
     { 
      TotalTextBox.Focus(); 
     } 
    } 
    else 
    { 
     TotalTextBox.Focus(); 
    } 
} 

НО из примера у вас есть вы даже не должны быть прохождения этих параметров (DotControl, tb, Count) к новому методу RemoveLastButton, потому что они являются свойство вашего класса все равно так доступны. Это означает, что вам даже не нужно вникать в новый метод, подобный этому, и может просто поместить этот код в обработчик событий, как у вас, но без изменения сигнатуры обработчика события.

+0

Спасибо, это работает отлично. – methuselah