[C#]Winform中检测多个文本框的输入事件
414 Views
Winform中TextBox文本框的TextChange事件可以检测到一个TextBox的文本内容改变,但是如何同时对多个文本框进行输入检测有些麻烦。
现在有这么一个需求,要让用户填写一个信息表,填写完成后保存。用户在打开已经保存过的信息表时可能会修改信息表,要判断是否对这个信息表进行了修改。如果修改则更新这个信息表的内容,否则不允许使用保存,因为保存会因为重复数据出现错误。
考虑到一个panel中有几十个TextBox,不可能为每一个TextBox重写一个TextChange事件。
在网上找到相关办法大致有两个,一是重写TextBox类,为新写的TextBox设置TextChange方法。还有一种方法是使用winform原生的TextBox,将所有TextBox的TextChange事件绑定到一个函数。
这里尝试使用第二种方法,因为比较简单= =
TextChange模板为
gengral_Text_Changed(object sender, EventArgs e)
sender为此次操作的对象。使用
sender.Equals(this.Winform.Object)
可判断当前操作的控件对象
private void general_Text_Changed(object sender, EventArgs e){
if (sender.Equals(this.TextBox1) {
do pro1
} else if (sender.Equals(this.TextBox2) {
do pro2
}
}
另外,如果对textbox的操作基本一致,比如只是过滤掉非数字的输入,并重新让用户输入,可以这么简化代码:
private void Only_Num_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar >= '0' && e.KeyChar <= '9') || e.KeyChar == '\b')
e.Handled = false;
else
e.Handled = true;
((TextBox)sender).Focus();
}