老问题新玩法,VS2022 C# 文本框的控制输入,多文本框输入控制相同
- 一、只允许输入正整数
- 1、在 _textID 文本框中添加 KeyPress 事件
- 2、在 _textID 文本框 KeyPress 事件添加代码
- 二、只允许输入正数、负数,小数点不能是第一位,负号必须第一位,可以回退键删除
- 1、在 _textINPUT 文本框中添加KeyPress事件
- 2、在 _textINPUT 文本框 KeyPress事件添加代码
- 三、有多个文本框需要控制相同的输入条件
一、只允许输入正整数
1、在 _textID 文本框中添加 KeyPress 事件
2、在 _textID 文本框 KeyPress 事件添加代码
private void _textID_KeyPress(object sender, KeyPressEventArgs e){char ch = e.KeyChar;if (!char.IsDigit(ch) && ch != 8) // 只允许输入数字和回退键{e.Handled = true;}}
二、只允许输入正数、负数,小数点不能是第一位,负号必须第一位,可以回退键删除
1、在 _textINPUT 文本框中添加KeyPress事件
2、在 _textINPUT 文本框 KeyPress事件添加代码
C# 文本框的控制输入以前通常的方法:
//负号只能第一位输入,且只能输入一次
if (e.KeyChar == 45 && (((TextBox)sender).SelectionStart != 0 || ((TextBox)sender).Text.IndexOf("-") >= 0))
{e.Handled = true;
}
//小数点只能输入一次
if (e.KeyChar == 46 && ((TextBox)sender).Text.IndexOf(".") >= 0) e.Handled = true;
上面代码小数点可以出现在负号后面,语句不严谨,VS2022提示简化语言,按规则修改:
private void _textINPUT_KeyPress(object sender, KeyPressEventArgs e){char ch = e.KeyChar;//键字string input = ((TextBox)sender).Text;//输入的文本内容int one = ((TextBox)sender).SelectionStart;//文本框输入位置//只允许数字、回退键char(8)、负号- char(45)、小数点. char(46)if (!Char.IsDigit(ch) && ch != 8 && ch != 45 && ch != 46) e.Handled = true;//小数点只能输1次、不能在第一位,小数点不能在负号后if (ch == 46 && (input.Contains('.') || input == "" || input == "-")) e.Handled = true; //负号只能第一位输入,且只能输入一次if (ch == 45 && (one != 0 || input.Contains('-'))) e.Handled = true;}
修改测试通过验证!
三、有多个文本框需要控制相同的输入条件
古老复杂的笨办法,为多个文本框添加自己的KeyPress事件,把相同的代码复制到各自 KeyPress 事件中。
在VS2022中,在需要只允许输入正数、负数,小数点不能是第一位,负号必须第一位,可以回退键删除,这些控制相同的输入条件,在文本框事件中,都可以选择 _textINPUT_KeyPress 事件,事件相同,控制相同。
在其它只允许输入正整数的文本框中,选择 _textID_KeyPress 事件即可。