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