C# 如何手动执行按钮单击?

C# 如何手动执行按钮单击?,c#,winforms,click,C#,Winforms,Click,在C表格上我有一个按钮。当我双击按钮时,它会自动创建函数 private void button_Click(object sender, EventArgs e). 这个很好用 我的问题是:如何手动执行此功能? 我想在构造函数中运行一次?您可以这样调用它: button_Click(this, EventArgs.Empty); 您可以尝试以下方法: button_Click(button,new EventArgs()); 或者你可以 button.PerformClick();

在C表格上我有一个按钮。当我双击按钮时,它会自动创建函数

 private void button_Click(object sender, EventArgs e).
这个很好用

我的问题是:如何手动执行此功能?
我想在构造函数中运行一次?

您可以这样调用它:

button_Click(this, EventArgs.Empty);
您可以尝试以下方法:

button_Click(button,new EventArgs());
或者你可以

button.PerformClick();

我的问题是:如何手动执行此功能

不要手动执行按钮单击。它的目的是仅在按钮引发单击事件时执行

我想在构造函数中运行一次

提取此事件处理程序中的代码以分离方法,并从c运行它 构造函数和处理程序:

public Form1()
{
    InitializeComponent();
    DoSomething();
}

private void button_Click(object sender, EventArgs e)
{
    DoSomething();
}

private void DoSomething()
{
    // extract handler code here
}

最好将代码从单击按钮转移到新函数,并调用该函数。像这样:



    void MyFunc()
    {
        //code that was previously in button_click
    }
    private void button_Click(object sender, EventArgs e)
    {
        MyFunc();
    }

    void OtherFunction()
    {
        MyFunc();
    }


该函数是一个事件处理程序:作为对事件的响应执行的函数,在本例中是一个用户事件:用户单击按钮

如果您需要在不触发事件的情况下执行相同的操作,正确的方法是将执行该操作的代码移动到单独的方法中

private void ExecuteMyAction()
{
   // Do stuff
}

private void button_Click(object sender, EventArgs e)
{ 
   ExecuteMyAction()
}
然后可以在构造函数中安全地调用该方法

public class MyClass
{ 
   public MyClass()
   {
      ExecuteMyAction();
   }
}
实际上,最好是尽可能精简处理程序中的代码,并将执行该操作的代码移到另一个方法中。在处理程序中,您只需收集执行操作所需的信息,该信息仅在处理事件时可用,然后将该信息传递给负责处理该信息的系统的另一部分

例如,如果在用户单击按钮时需要用户在文本框中输入名称,则
按钮\u click
处理程序应仅从文本框中获取字符串,并调用保存该信息的方法,将字符串作为参数传递


这样,您可以通过将执行操作的代码(业务代码)与命令要执行的操作的代码(这是样板代码,取决于您使用的框架)分开来减少耦合。

请注意,这通常是一种不好的方法,因为您无法轻松区分“真实”单击和“虚假”单击。通常,您创建一个方法来执行该操作,并通过单击按钮调用它。通过这种方式,您可以随时调用该方法,而无需假装单击。为什么要首先执行单击处理程序?这个处理程序应该只包含足够的代码来调用适当的业务函数,而不包含业务逻辑本身。将代码提取到另一个函数并调用该函数,这两个函数都可以工作。但是,在第一个方法的按钮点击事件中使用发送者对象会发生什么呢?这是一个坏代码和坏体系结构的例子。好的答案是“谢尔盖·奥尼”,我不这么认为。问题是“如何手动执行按钮?”而不是“如何调用函数?”很抱歉不同意。由于@Thomas希望执行与处理程序相同的操作,而不是以编程方式触发事件,因此问题的形式不正确。我肯定知道,因为他想调用构造函数中的事件处理程序代码,所以在控件还没有绘制的情况下伪造按钮单击事件毫无意义;)我知道Patrick手动调用事件是个坏主意,我们有责任教授正确的方法。但是,当有人真的想这样做时,它应该是合适的。在参数中为sender而不是button指定父对象是正确的方法吗?@Nimesh:我认为这是个坏主意,因为您应该尽可能地分离逻辑和UI。
public class MyClass
{ 
   public MyClass()
   {
      ExecuteMyAction();
   }
}