4

の新しいバージョンを実装したいと思います。それをTextBox呼び出して、 3 回のテキスト変更ごとにのみイベントを発生させます。FunkyTextBoxTextChanged

このために別のイベントを発生させたいだけの場合は、それFunkyTextChangedを と呼びましょう。実装は簡単です。

class FunkyTextBox : TextBox
{
    int counter = 0;
    int MAX_CHANGES = 3;
    public event EventHandler FunkyTextChanged;

    public FunkyTextBox()
    {
        this.TextChanged += (s, e) =>
        {
            if (++counter < MAX_CHANGES)
                return;
            counter = 0;
            if (FunkyTextChanged != null)
                FunkyTextChanged(this, null);
        };
    }
}

しかし、このアプローチには 1 つの欠点があります。ユーザーは、単一の変更後に発生する親のバージョンである を使用することを想定し、イベントTextChangedをサブスクライブしようとは思わないでしょう。FunkyTextChanged

TextChangedこれにイベントを使用することは可能ですか?親の TextChnaged をユーザーから隠しFunkyTextBoxて、それを独自のものに置き換えるにはどうすればよいですか?

4

2 に答える 2

3

私は次のようなものに行きます:

    class FunkyTextBox : TextBox
    {
        int counter = 0;
        int MAX_CHANGES = 3;

        public FunkyTextBox()
        {
        }

        protected override void OnTextChanged(EventArgs e)
        {
            if (++counter < MAX_CHANGES)
                return;
            counter = 0;
            base.OnTextChanged(e);
        }
    }
于 2013-03-01T12:45:35.817 に答える
2

OnTextChanged保護されたメソッドを実装でオーバーライドするだけです。

protected override void OnTextChanged(TextChangedEventArgs e){
  // your code here
}

このメソッドは仮想であるため、カスタム テキスト ボックスを使用する場合は、このメソッドを呼び出す必要があります。

WinForms についてはこちらを、WPFについてはこちらをご覧ください。

于 2013-03-01T12:21:54.313 に答える