2

我有一个问题,我创建了一个从 TextBox 继承的自定义控件,我需要在其中覆盖Text属性和OnKeyPressorOnKeyUp事件。

  • text 属性被覆盖以显示与文本框的实际值不同的值(用于单位转换)
  • 我目前尝试添加的 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

试试看

  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 回答
0

尝试覆盖 AppendText 属性。

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