我查看了 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/