创建一个只接受数值的文本框。设计师模式的问题

时间:2010-02-01 09:24:07

标签: c# winforms

我的表单有六到七个文本框。少数文本框只需要接受数字字符,即0-9,十进制数和+或 -

我处理了文本框按键事件

private void textBox1_KeyPress(object sender,KeyPressEventArgs e) {     if(!char.IsControl(e.KeyChar)
        &安培;&安培; !char.IsDigit(e.KeyChar)
        &安培;&安培; e.KeyChar!='。'')     {         e.Handled = true;     }

}

现在我必须为所有文本框编写相同的代码,我觉得它是减少的。 我创建了一个从TextBox派生的新类MyTextBox,并将上面的代码添加到其中。

在设计器模式下,我拖放文本框控件..转到Designer.cs文件并将行更改为

private MyTextbox m_txtName = new MytextBox();

现在的问题是,如果我添加一个新按钮或任何控件到表单,则更改/更新designer.cs文件...并且aboe行更改为普通TextBox,我必须每次都更换它......我可以避免这个吗?

注意:我不想使用MasktextBox或numericKeydown控件。

3 个答案:

答案 0 :(得分:1)

您可以将自己的控件添加到工具箱中,然后将其放在表单设计器上。

答案 1 :(得分:1)

一个很好的例子,你会发现here

关于设计师。当您重建项目时,您将(应该)将您的textBox视为工具箱中的自定义组件。拖放该组件而不是您的古代文本框。

如果没有,您需要查找MyTextBox1的所有引用,因为您需要在至少2个位置更改它:声明和创建(MyTextBox mtb;mtb = new MyTextBox();

答案 2 :(得分:0)

使用事件KeyPress

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
   int isNumber = 0;
   e.Handled = !int.TryParse(e.KeyChar != (char)Keys.Back ? e.KeyChar.ToString() : "0", out isNumber);
}