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

本文关键字:参数 重载 事件处理 程序 三个 | 更新日期: 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方法,因为它们无论如何都是类的属性,因此可以访问。这意味着您甚至不需要分解成这样的新方法,只需将代码放入事件处理程序中即可,但无需更改事件处理程序的签名。