我遵循了指南
如何制作一个只接受数字的文本框?
提供的方法限制了我们可以在盒子上输入的字符
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,可视化c#2010快速版
您可以在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;
将当前textBox18_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);
}
}
}