简体   繁体   English

如何从文本框继承并覆盖键和键事件?

[英]How to inherit from textbox and override keypress and keyup events?

I want to create a new class inherits from System.Windows.Forms.TextBox and assign keypress and keyup events to my control. 我想创建一个继承自System.Windows.Forms.TextBox的新类,并将keypress和keyup事件分配给我的控件。

Something like this : 像这样的东西:

    class CurrencyTextbox : TextBox
    {
        private void CurrencyTextbox_KeyPress(object sender, KeyPressEventArgs e)
        {
            char ch = e.KeyChar;

            if (!Char.IsDigit(ch) && ch != 8 && ch != 13)
            {
                e.Handled = true;
            }
        }

        private void CurrencyTextbox_KeyUp(object sender, KeyEventArgs e)
        {
            if (!string.IsNullOrEmpty(CurrencyTextbox.Text))
            {
                System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");
                Int64 valueBefore = Int64.Parse(CurrencyTextbox.Text, System.Globalization.NumberStyles.AllowThousands);
                CurrencyTextbox.Text = String.Format(culture, "{0:N0}", valueBefore);
                CurrencyTextbox.Select(CurrencyTextbox.Text.Length, 0);
            }
        }
    }

You should override the protected virtual void OnKeyUp(KeyEventArgs e) . 您应该重写protected virtual void OnKeyUp(KeyEventArgs e)
Make sure to call base.OnKeyUp(e) , or the event will not be raised. 确保调用base.OnKeyUp(e) ,否则将不会引发该事件。

You can also add a regular event handler by writing KeyUp += CurrencyTextbox_KeyUp 您还可以通过编写KeyUp += CurrencyTextbox_KeyUp添加常规事件处理程序

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM