2

TextプロパティとOnKeyPressorOnKeyUpイベントをオーバーライドする必要があるTextBoxから継承するカスタムコントロールを作成したときに問題が発生します。

  • テキストプロパティは、テキストボックスの実際の値とは異なる値を表示するようにオーバーライドされています(単位変換の場合)
  • 私が現在追加しようとしているOnKeyPress/OnKeyUpは、数値の入力のみを許可します。

KeyPressイベントがトリガーされると、更新されるテキストはbase.Textオーバーライドの代わりになります...この問題をどのように克服するかについてのアイデアはありますか?

    public override string Text
    {
        get
        {
            return base.Text;
        }
        set
        {
            displayValue = parse;
            base.Text = this.ContainsFocus ? displayValue.ToString() : displayValue.ToString("N3");
        }
    }
    protected override void OnKeyUp(KeyEventArgs e)
    {
        e.Handled = true;
        if ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) ||
            (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) ||
            e.KeyCode == Keys.Decimal)
        {
            e.Handled = false;
        }
        //Code to only accept numerical buttons
        base.OnKeyUp(e);
    }
4

4 に答える 4

2

最終的に必要なのは

protected override void OnKeyPress(KeyPressEventArgs e)
{....
    base.OnKeyPress(e);
    Text = base.Text;
 }

これが当てはまる理由は、base.OnKeyPress(e)がbase.Textを処理する必要があるためです。これは、オーバーライドについて知る方法がないことを意味します。

于 2013-01-15T14:01:58.010 に答える
1

変更してみてくださいOnKeyUp

 protected override void OnKeyUp(KeyEventArgs e)
    {       
        if ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) ||
            (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) ||
            e.KeyCode == Keys.Decimal)
        {
             e.Handled = false;
             base.OnKeyUp(e);
        }
        else
        {
             e.Handled= true;
        }       

    }

編集:KeyPress代わりに使用してください:

 protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
                base.OnKeyPress(e);
            }
            else
            {
                e.Handled = true;
            }

        }
于 2013-01-15T12:49:01.377 に答える
0

AppendTextプロパティをオーバーライドしてみてください。

public void AppendText(string text)
    Member of System.Windows.Forms.TextBoxBase
于 2013-01-15T11:47:50.167 に答える
0

試してみる

  protected override void OnKeyPress(KeyPressEventArgs e)
        {
             if (!char.IsControl(e.KeyChar)
                         && !char.IsDigit(e.KeyChar))
                    e.Handled = true;
            base.OnKeyPress(e);
         }
于 2013-01-15T13:03:37.657 に答える