[C#]Winform中检测多个文本框的输入事件

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

留下回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据