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

C# 使用三个附加参数重载事件处理程序,c#,wpf,xaml,C#,Wpf,Xaml,是否可以使用参数重载事件处理程序?如果不是,传递额外3个参数的最佳方式是什么 我一直收到错误消息: 以下是我正在努力实现的目标: MainWindow.xaml.cs public bool DotControl { get; set; } public int Count { get; set; } TextBox Tb = Keyboard.FocusedElement as TextBox; private void RemoveLastButton_Cl

是否可以使用参数重载事件处理程序?如果不是,传递额外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();
        }
    }
    // 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 = "";
    }
键盘.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();
        }
    }
    // 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
方法,因为它们是您的类的属性,因此可以访问。这意味着您甚至不需要像这样突破进入一个新方法,只需将代码按原样放入事件处理程序中,但不更改事件处理程序的签名。

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

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
方法,因为它们是您的类的属性,因此可以访问。这意味着您甚至不需要像这样突破进入一个新方法,只需将代码按原样放入事件处理程序中,但不更改事件处理程序的签名。

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

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
方法,因为它们是您的类的属性,因此可以访问。这意味着您甚至不需要像这样突破进入一个新方法,只需将代码按原样放入事件处理程序中,但不更改事件处理程序的签名。

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

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
方法,因为它们是您的类的属性,因此可以访问。这意味着您甚至不需要使用这样的新方法,只需将代码按原样放入事件处理程序中,而无需更改事件处理程序的签名。

AFAIK事件处理程序具有特定的签名-为什么不从事件处理程序调用自定义方法呢?你可以传递任何你喜欢的。我认为
dotControl
Count
应该是字段/properties@JeroenvanLangen-谢谢,问题已经更新了,我的逻辑正确吗?@Mashton-谢谢,请给出一个示例,以及您希望如何给这些自定义事件参数?AFAIK事件处理程序具有特定的签名-为什么不直接从事件处理程序调用自定义方法?你可以传递任何你喜欢的。我认为
dotControl
Count
应该是字段/properties@JeroenvanLangen-谢谢,问题已经更新了,我的逻辑正确吗?@Mashton-谢谢,请给出一个示例,以及您希望如何给这些自定义事件参数?AFAIK事件处理程序具有特定的签名-为什么不直接从事件处理程序调用自定义方法?你可以传递任何你喜欢的。我认为
dotControl
Count
应该是字段/properties@JeroenvanLangen-谢谢,问题已经更新了,我的逻辑正确吗?@Mashton-谢谢,请给出一个示例,以及您希望如何给这些自定义事件参数?AFAIK事件处理程序具有特定的签名-为什么不直接从事件处理程序调用自定义方法?你可以传递任何你喜欢的。我认为
dotControl
Count
应该是字段/properties@JeroenvanLangen-谢谢,问题已更新,我的逻辑正确吗?@Mashton-谢谢,请举个例子,以及您希望如何给出这些自定义事件参数?????