c# - Control.PerformClick() 没有做任何事情,我错过了什么?

标签 c# winforms

我查看了 MSDN 文档和几个 SO 答案,所有迹象都表明这项工作有效。在这一点上,我想我要么完全误解了期望的内容,要么我错过了我需要的一行代码。

简而言之,我有一个带按钮的 WinForms 应用程序,我想要另一个函数在代码中的某个位置“单击”该按钮。这是相关的部分:

//表单.Designer.cs

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

//表单.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/

相关文章:

c# - 在一个Json文件中加入一行Json

vb.net - 将 VB.Net 桌面应用程序转换为移动 Web 应用程序的最快方法?

c# - C# 中的复选框数组

c# - 我将如何在设计时设置我的 UserControl 的标签?

c# - 我想使用 WPF 在 scrollviewer 控件中创建一个复选框数组

c# - 月历显示日期为周一至周日

c# - 此结束标记没有匹配的开始标记。我搞砸了某个地方。请帮我看看好吗?

javascript - 在我的服务器上配置 JavaScript Google Maps API 时出现问题

c# - 如何向 WebBrowser 控件传递数据或从 WebBrowser 控件传递数据?

c# - 如何让一个简单的函数在c#中一直运行