我已遵循本指南
How do I make a textbox that only accepts numbers?
提供的方法限制了我们可以在框中输入的字符
private void textBox18_KeyPress_1(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
(e.KeyChar != ','))
{
e.Handled = true;
}
// only allow one decimal point
if ((e.KeyChar == ',') && ((sender as TextBox).Text.IndexOf(',') > -1))
{
e.Handled = true;
}
}
它工作得很好,但有一个问题,我必须将事件处理程序添加到100多个文本框中。有更简单的方法吗?因为它包含了designer.cs和cs。
我正在研究winform,visual c#2010 express edition
答案 0 :(得分:1)
您可以在FormLoad
方法中执行此操作:
textBox19.KeyPress += textBox18_KeyPress_1;
textBox20.KeyPress += textBox18_KeyPress_1;
textBox21.KeyPress += textBox18_KeyPress_1;
textBox22.KeyPress += textBox18_KeyPress_1;
textBox23.KeyPress += textBox18_KeyPress_1;
// etc
textBox999.KeyPress += textBox18_KeyPress_1;
答案 1 :(得分:1)
将当前的textBox__KeyPress_1重命名为更具描述性的内容。
例如。 GenericTextBoxKeyPress
然后,在构造函数(在InitComponents之后)或Form Load中,您可以逐个或使用循环将这些事件添加到文本框中。
//One by one
textBox1.KeyPress += GenericTextBoxKeyPress;
textBox2.KeyPress += GenericTextBoxKeyPress;
textBox3.KeyPress += GenericTextBoxKeyPress;
//All TextBoxes in your form
foreach(var textbox in this.Controls.OfType<TextBox>())
{
textbox.KeyPress += GenericTextBoxKeyPress;
}
或者,您可以创建一个实现TextBox的类并覆盖OnKeyPress行为。然后,更改所有TextBox以使用此新类。
using System.Windows.Forms;
namespace MyApplication
{
class MyTextBox : TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
(e.KeyChar != ','))
{
e.Handled = true;
}
// only allow one decimal point
if ((e.KeyChar == ',') && Text.IndexOf(',') > -1)
{
e.Handled = true;
}
base.OnKeyPress(e);
}
}
}