C# 如何从另一个方法调用按钮单击事件

C# 如何从另一个方法调用按钮单击事件,c#,C#,如何从另一个方法调用子图按钮(object sender,RoutedEventArgs args) private void SubGraphButton_Click(object sender, RoutedEventArgs args) { } private void ChildNode_Click(object sender, RoutedEventArgs args) { // call SubGraphButton-Click(). } 你可以简单地称之为: SubGra

如何从另一个方法调用
子图按钮(object sender,RoutedEventArgs args)

private void SubGraphButton_Click(object sender, RoutedEventArgs args)
{
}

private void ChildNode_Click(object sender, RoutedEventArgs args)
{
   // call SubGraphButton-Click().
}

你可以简单地称之为:

SubGraphButton_Click(sender, args);

现在,如果您的
子图形按钮单击
对参数执行某些操作,您可能会遇到麻烦,但通常不会对它们执行任何操作。

通常更好的方法是触发事件(单击),而不是直接调用该方法。

您可以通过向按钮按钮按钮事件传递参数来调用它:

private void SubGraphButton_Click(object sender, RoutedEventArgs args)
{
}

private void ChildNode_Click(object sender, RoutedEventArgs args)
{
   SubGraphButton_Click(sender, args);
}

将其添加到Click委托的实例:

ChildNode.Click+=子图按钮\u单击


它使用.NET事件跟随模式(观察者)进行操作。

您可以通过以下代码轻松完成此操作(假设您的按钮名为btnButton):


您可以执行不同的方法来解决这个问题。最好的方法是,如果假设两个按钮执行相同的任务,则可以定义第三个函数来执行该任务。例如:

private void SubGraphButton_Click(object sender, RoutedEventArgs args)
{
    myJob()  
}

private void ChildNode_Click(object sender, RoutedEventArgs args)
{
    myJob()
}

private void myJob()
{
    // Your code here
}
但如果你仍然坚持按自己的方式去做,最好的行动是:

private void SubGraphButton_Click(object sender, RoutedEventArgs args)
{
}

private void ChildNode_Click(object sender, RoutedEventArgs args)
{
   SubGraphButton_Click.PerformClick();
}

您可以通过传递调用按钮单击事件

private void SubGraphButton_Click(object sender, RoutedEventArgs args)
{
}

private void ChildNode_Click(object sender, RoutedEventArgs args)
{
   SubGraphButton_Click(sender, args);
}
private void SubGraphButton_Click(object sender, EventArgs args)
{
}

private void Some_Method() //this method is called
{
   SubGraphButton_Click(new object(), new EventArgs());
}
也没有经过

private void SubGraphButton_Click(object sender, RoutedEventArgs args)
{
}

private void ChildNode_Click(object sender, RoutedEventArgs args)
{
   SubGraphButton_Click(sender, args);
}
private void SubGraphButton_Click(object sender, EventArgs args)
{
}

private void Some_Method() //this method is called
{
   SubGraphButton_Click(new object(), new EventArgs());
}

对我来说,这在WPF工作

    private void Window_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            RoutedEventArgs routedEventArgs = new RoutedEventArgs(ButtonBase.ClickEvent, Button_OK);
            Button_OK.RaiseEvent(routedEventArgs);
        }
    }

使用InvokeOnClick事件。即使按钮在WPF中不可见/禁用,它也可以工作,您可以通过以下方式轻松完成:

this.button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));

对于想知道的人,这也适用于按钮点击。 例如:

private void btn_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Test")
        }

private void txb_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)13)
            {
                btn_Click(sender, e);
            }

在这种情况下,当在文本字段(txb)中按Enter键时,它将单击激活MessageBox的按钮。

从任何地方调用它的简单方法就是使用“null”和“RoutedEventArgs.Empty”,如下所示:

子图形按钮单击(null,RoutedEventArgs.Empty);

我们在这个项目中有两个表单。 主要形式变化

private void按钮1\u单击(对象发送者,事件参数e)
{
//工作
}

public void按钮1\u单击(对象发送者,事件参数e)
{
//工作
}

另一种形式,当我们需要上述函数时

        private void button2_Click(object sender, EventArgs e)
    {
        main_page() obj = new main_page();
        obj.button2_Click(sender, e);
    }
对于WPF:

YourButtonName.RaiseEvent(new RoutedEventArgs(System.Windows.Controls.Primitives.ButtonBase.ClickEvent));

简直太美了3我以前总是使用这个,但在遇到很多问题后,我认为选择的答案是一种更安全的方式。@Pedram无意打扰您,它只是按钮的PerformClick()方法在按钮未启用且不可见时不会触发,我制作的大多数表单通常都会启用和禁用按钮,因此我对它有问题。@Burgo855感谢您的反馈!因此,这取决于通话的类型或使用地点。一般来说,它确实需要按钮。而且,请确保这里所有的想法都得到了赞赏,没有人会因为你分享了你的想法而感到不安:)如果它包含在会产生交叉线程的内容中,这并不总是有效的。这是一个解决这个问题的方法。可能会帮助其他人:this.Invoke((MethodInvoker)委托(){btnButton.PerformClick();});如果您添加了一个示例代码段来演示您的意思,您的答案将得到改进。如果
子图形按钮单击()
异步的怎么办?需要模拟点击的方法不是吗?这不是正确的答案。正确的答案是调用
子图按钮。PerformClick()
inside
ChildNode\u Click()
可能在调用之前添加“wait”对于任何想在事件之外执行此操作的人,我通过创建自定义发送者和参数来管理:
object sender=this
RoutedEventArgs参数
。然后像平常一样调用它:
SubGraphButton\u单击(sender,args)感谢您分享答案。然而,它混淆了它工作的原因。在您的情况下,需要将事件处理程序公开。这是一个不同的解决方案,需要将两个参数传递给第一个方法。