用三个附加参数重载一个事件处理程序

用三个附加参数重载一个事件处理程序

问题描述:

是否有可能用参数重载一个事件处理程序?如果不是,传递额外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 2014-09-19 11:53:13

+0

我认为'dotControl'和'Count'应该是字段/属性 – 2014-09-19 11:54:46

+0

@JeroenvanLangen - 谢谢,问题已经更新,我的逻辑正确吗? – methuselah 2014-09-19 12:02:29

事件处理程序具有特定的签名,因此请从事件处理程序调用您的自定义方法。例如:

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 2014-09-19 18:28:26