我有很多按钮,但我已修改它们,所以每个按钮都需要清除textBox才能完全正常运行。但是,我不知道如何调用按钮的本机单击事件。我试图放btnObj.PerformClick()
但它不起作用。
foreach(object objObject in Controls)
{
if (objObject is Button)
{
(Button)btnObj = (Button)objObject;
btnObj.Click += (sender,e) =>
{
mainTextBox.Clear();
// how to call the native click button?
}
}
}
如果我不编辑代码,mainTextBox永远不会清除。
答案 0 :(得分:3)
您可以创建自定义按钮,在启动Click事件处理程序之前调用某些操作:
public class ButtonWithOverture : Button
{
public Action Overture { get; set;}
protected override void OnClick(EventArgs e)
{
if (Overture != null)
Overture();
base.OnClick(e);
}
}
使用此按钮代替简单按钮。您将能够以这种方式添加特定操作:
foreach(var button in Controls.OfType<ButtonWithOverture>())
button.Overture = () => mainTextBox.Clear();
但更好地考虑更改应用程序的逻辑。想想为什么每次都要清除这个文本框。也许最好简单地在Click事件处理程序的开头清除文本框。为避免代码重复(例如,如果您需要在表单上进行其他准备工作),可以将此操作转换为单独的方法:
private void ClearControls()
{
mainTextBox.Clear();
}
从每个Click事件处理程序调用它。对于其他开发者来说至少这一点很明显。
答案 1 :(得分:-1)
您的代码存在一些问题,例如您如何声明变量。我相信这就是你要找的东西
foreach(object objObject in Controls)
{
if (objObject is Button)
{
Button btnObj = (Button)objObject;
btnObj.Click += (sender, e) =>
{
mainTextBox.Clear();
btnObj.PerformClick();
// how to call the native click button?
};
}
}