我已经查看了MSDN文档和几个SO答案,所有迹象都表明该工作正常。在这一点上,我想我要么完全误解了预期的结果,要么错过了我需要的一行代码。

简而言之,我有一个带有按钮的WinForms应用程序,并且我希望另一个函数在代码中的某一点“单击”该按钮。这是相关的位:

//form.Designer.cs

this.btnAddBranch.Click += new System.EventHandler(this.btn_add_Click);

//form.cs
// using statements
public partial class EditClient : Form
{
   // ...
   public TestClick()
   {
      //btnAddBranch.PerformClick(); <-- would like to know why this fails ...
      btn_add_Click(this, EventArgs.Empty);
   }
   private void btn_add_Click(object sender, EventArgs e)
   {
      MessageBox.Show("You clicked it!");
   }
 }

我希望btnAddBranch.PerformClick()的带注释的行等同于它下面的行。但事实并非如此,当调用TestClick()时,它似乎无能为力。如果我不加注释,则可以正常工作。

我是否想念某些东西,还是完全误解了某些内容?

最佳答案

您的问题是TestClick()是您的表单构造函数。在窗体构造函数完成之前,没有控件可以调用PerformClick()。如果您真的想尽早调用该代码,请执行以下操作。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        //Do not call methods on controls here, the controls are not yet initialized
    }

    private void TestClick()
    {
        btn_add.PerformClick();
    }

    private void btn_add_Click(object sender, EventArgs e)
    {
        MessageBox.Show("You Clicked it");
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        TestClick();
    }
}

在除窗体构造函数之外的任何地方调用PerformClick()将创建所需的结果。

关于c# - Control.PerformClick()什么也没做,我想念什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17155398/

10-11 22:38