-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 に答える