-3

我有很多按钮,但我已经修改了它们,所以每个按钮都需要清除文本框才能完全正常工作。但是,我不知道如何调用按钮的原生点击事件。我试过放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 永远不会清除。

4

2 回答 2

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 事件处理程序中调用它。至少这对于其他开发人员来说是清楚的。

于 2013-11-05T22:10:29.273 回答
-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?
                };
            }
        }
于 2013-11-05T22:14:20.487 回答