Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从textbox继承并覆盖keypress和keyup事件?_C#_Winforms_Inheritance_Textbox - Fatal编程技术网

C# 如何从textbox继承并覆盖keypress和keyup事件?

C# 如何从textbox继承并覆盖keypress和keyup事件?,c#,winforms,inheritance,textbox,C#,Winforms,Inheritance,Textbox,我想创建一个从System.Windows.Forms.TextBox继承的新类,并将keypress和keyup事件分配给我的控件 大概是这样的: class CurrencyTextbox : TextBox { private void CurrencyTextbox_KeyPress(object sender, KeyPressEventArgs e) { char ch = e.KeyChar;

我想创建一个从System.Windows.Forms.TextBox继承的新类,并将keypress和keyup事件分配给我的控件

大概是这样的:

    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);
            }
        }
    }

您应该覆盖受保护的虚拟void OnKeyUp(KeyEventArgs e)
确保调用
base.OnKeyUp(e)
,否则不会引发事件


您还可以通过写入
KeyUp+=CurrencyTextbox\u KeyUp来添加常规事件处理程序。您应该覆盖
受保护的虚拟void OnKeyUp(KeyEventArgs e)

确保调用
base.OnKeyUp(e)
,否则不会引发事件


您还可以通过编写
KeyUp+=CurrencyTextbox\u KeyUp

来添加常规事件处理程序。谢谢,它可以工作!现在,每当我需要它时,我需要将一个文本框从工具箱拖到表单中,然后转到from.Designer.cs,将“private System.Windows.Forms.textbox TextBox1;”替换为“private CurrencyTextbox TextBox1;”。是否有任何方法将其添加到工具箱中,以便我可以像其他控件一样使用它。在生成项目后,它应该显示在工具箱中。如果没有,请检查“工具箱选项”选项卡。另外,尝试将类
公开
。感谢SLaks,我尝试以数字格式返回货币文本框的文本。例如:textbox2.text=currencytextbox1.text(currencytextbox1.text=999999),那么我想要textbox2.text=999999(否“,”)。我试图覆盖文本获取方法,但应用程序随后崩溃。你有什么想法吗?提前感谢!谢谢,它很管用!现在,每当我需要它时,我需要将一个文本框从工具箱拖到表单中,然后转到from.Designer.cs,将“private System.Windows.Forms.textbox TextBox1;”替换为“private CurrencyTextbox TextBox1;”。是否有任何方法将其添加到工具箱中,以便我可以像其他控件一样使用它。在生成项目后,它应该显示在工具箱中。如果没有,请检查“工具箱选项”选项卡。另外,尝试将类
公开
。感谢SLaks,我尝试以数字格式返回货币文本框的文本。例如:textbox2.text=currencytextbox1.text(currencytextbox1.text=999999),那么我想要textbox2.text=999999(否“,”)。我试图覆盖文本获取方法,但应用程序随后崩溃。你有什么想法吗?提前感谢!SLaks的答案有效!非常感谢他。现在,每当我需要它时,我需要将一个文本框从工具箱拖到表单中,然后转到from.Designer.cs,将“private System.Windows.Forms.textbox TextBox1;”替换为“private CurrencyTextbox TextBox1;”。是否有任何方法将其添加到工具箱中,以便我可以像其他控件一样使用它。我尝试以数字格式返回货币文本框的文本。例如:textbox2.text=currencytextbox1.text(currencytextbox1.text=999999),那么我想要textbox2.text=999999(否“,”)。我试图覆盖文本获取方法,但应用程序随后崩溃。你有什么想法吗?提前感谢!SLaks的答案有效!非常感谢他。现在,每当我需要它时,我需要将一个文本框从工具箱拖到表单中,然后转到from.Designer.cs,将“private System.Windows.Forms.textbox TextBox1;”替换为“private CurrencyTextbox TextBox1;”。是否有任何方法将其添加到工具箱中,以便我可以像其他控件一样使用它。我尝试以数字格式返回货币文本框的文本。例如:textbox2.text=currencytextbox1.text(currencytextbox1.text=999999),那么我想要textbox2.text=999999(否“,”)。我试图覆盖文本获取方法,但应用程序随后崩溃。你有什么想法吗?提前感谢!