1

C#Windowsアプリケーションのカスタムユーザーコントロールでこのコードを試しました。

public partial class HtextBox : DevExpress.XtraEditors.TextEdit
{
    protected override void OnTextChanged(KeyEventArgs kpe)
    {
        if (kpe.KeyCode == Keys.D1 ||
            kpe.KeyCode == Keys.D2 ||
            kpe.KeyCode == Keys.D3 ||
            kpe.KeyCode == Keys.D4 ||
            kpe.KeyCode == Keys.D5 ||
            kpe.KeyCode == Keys.D6 ||
            kpe.KeyCode == Keys.D7 ||
            kpe.KeyCode == Keys.D8 ||
            kpe.KeyCode == Keys.D9 ||
            kpe.KeyCode == Keys.D0
            ) {
                base.Text += kpe.KeyValue;
        }
    }
}

このエラーが発生しました:

エラー1'myproject.HtextBox.OnTextChanged(object、System.Windows.Forms.KeyEventArgs)':E:\ my project \ myproject\HtextBox.csをオーバーライドする適切なメソッドが見つかりません

カスタムテキストボックスを作成したい。ここでは、このテキストボックスに数値を入力として取得するだけにします。例は何でしょうか?

4

3 に答える 3

2

はのKeyEventArgsサブクラスですがSystem.EventArgs、C#ではサブクラスパラメーターを使用してメソッドをオーバーライドすることはできません。基本クラスのシグネチャでメソッドをオーバーライドしてから、KeyEventArgs関数内にキャストする必要があります。

protected override void OnTextChanged(System.EventArgs args) {
    KeyEventArgs kpe = (KeyEventArgs)args;
    ...
}

編集:OnTextChangedは提供されておらず、KeyEventArgs必要なように見えるので、別の方法をオーバーライドしてみてください 。

protected override void OnKeyDown(KeyEventArgs kpe) {
    ...
}
于 2012-05-08T15:08:45.133 に答える
0

@dasblinkenlightはあなたの質問に正しい答えを与えました。

ただし、メソッドForm.OnTextChangedはイベント発生メソッドであり、オーバーライドすることはほとんどありません。おそらく派生クラスのコンストラクターで、イベントハンドラーを作成することをお勧めします。

this.TextChanged += new EventHandler(OnTextChanged);

ところで、Visual Studioでは、入力後にTabキーを押すと+=、イベントハンドラーが生成されます。

于 2012-05-08T15:09:01.587 に答える
0

イベントハンドラの最初のパラメータを忘れたようです。

これに変更します:

protected override void OnTextChanged(Object sender, KeyEventArgs kpe) 
    {
        if (kpe.KeyCode == Keys.D1 ||
            kpe.KeyCode == Keys.D2 ||
            kpe.KeyCode == Keys.D3 ||
            kpe.KeyCode == Keys.D4 ||
            kpe.KeyCode == Keys.D5 ||
            kpe.KeyCode == Keys.D6 ||
            kpe.KeyCode == Keys.D7 ||
            kpe.KeyCode == Keys.D8 ||
            kpe.KeyCode == Keys.D9 ||
            kpe.KeyCode == Keys.D0
            ) {
                base.Text += kpe.KeyValue;
        }
    }
于 2012-05-08T15:13:28.403 に答える