C# 覆盖文本和OnKeyUp/OnKeyPress

C# 覆盖文本和OnKeyUp/OnKeyPress,c#,winforms,textbox,overriding,C#,Winforms,Textbox,Overriding,我遇到了一个问题,我创建了一个自定义控件,该控件继承自TextBox,在TextBox中我需要重写Text属性和OnKeyPress或onkeypup事件 正在重写text属性以显示与文本框的实际值不同的值(用于单位转换) 我当前尝试添加的OnKeyPress/OnKeyUp仅允许输入数值 当触发按键事件时,更新的文本是base.text,而不是my override。。。关于我如何克服这个问题有什么想法吗 public override string Text {

我遇到了一个问题,我创建了一个自定义控件,该控件继承自TextBox,在TextBox中我需要重写
Text
属性和
OnKeyPress
onkeypup
事件

  • 正在重写text属性以显示与文本框的实际值不同的值(用于单位转换)
  • 我当前尝试添加的OnKeyPress/OnKeyUp仅允许输入数值
当触发按键事件时,更新的文本是
base.text
,而不是my override。。。关于我如何克服这个问题有什么想法吗

    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);
    }
公共重写字符串文本
{
得到
{
返回base.Text;
}
设置
{
displayValue=parse;
base.Text=this.ContainsFocus?displayValue.ToString():displayValue.ToString(“N3”);
}
}
受保护的覆盖无效OnKeyUp(KeyEventArgs e)
{
e、 已处理=正确;

如果((e.KeyCode>=Keys.D0&&e.KeyCode=Keys.NumPad0&&e.KeyCode),请尝试重写AppendText属性

public void AppendText(string text)
    Member of System.Windows.Forms.TextBoxBase

尝试更改您的
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;
        }       

    }
试试看

  protected override void OnKeyPress(KeyPressEventArgs e)
        {
             if (!char.IsControl(e.KeyChar)
                         && !char.IsDigit(e.KeyChar))
                    e.Handled = true;
            base.OnKeyPress(e);
         }

最后它所需要的只是

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

我意识到这种情况的原因是这个基础必须处理base.Text,这意味着它无法知道我的覆盖

是否设置e.Handled=true;在OnKeyUp中?我当时在其中完全没有设置任何内容,其中唯一的代码是
e.KeyCode>=Keys.D0
等,编辑:和
base.OnKeyUp(e)
如图所示here@AndreyVoloshin-我已经更新了我的示例以包含我的完整onkeyupHi Andrey,我遇到的问题不是处理非数字字符,而是事件调用
base.Text而不是
override Text
protected override void OnKeyPress(KeyPressEventArgs e)
{....
    base.OnKeyPress(e);
    Text = base.Text;
 }