有一种方法可以在click事件之前执行事件

时间:2013-11-05 21:53:14

标签: c# winforms

我有很多按钮,但我已修改它们,所以每个按钮都需要清除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永远不会清除。

2 个答案:

答案 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?
                };
            }
        }