使用三个附加参数重载事件处理程序
本文关键字:参数 重载 事件处理 程序 三个 | 更新日期: 2023-09-27 18:23:36
是否可以用参数重载事件处理程序?如果没有,通过额外3个参数的最佳方式是什么?
我一直收到错误消息:
以下是我正在努力实现的目标:
主窗口.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 = "";
}
事件处理程序具有特定的签名,因此从事件处理程序调用自定义方法。例如:
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
方法,因为它们无论如何都是类的属性,因此可以访问。这意味着您甚至不需要分解成这样的新方法,只需将代码放入事件处理程序中即可,但无需更改事件处理程序的签名。