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()
insideChildNode\u Click()
可能在调用之前添加“wait”对于任何想在事件之外执行此操作的人,我通过创建自定义发送者和参数来管理:object sender=this代码>和RoutedEventArgs参数
。然后像平常一样调用它:SubGraphButton\u单击(sender,args)代码>感谢您分享答案。然而,它混淆了它工作的原因。在您的情况下,需要将事件处理程序公开。这是一个不同的解决方案,需要将两个参数传递给第一个方法。