在WinForm应用程序中,使用TextBox控件来接收用户输入是十分常见的。但有时候,我们需要限制用户的输入,例如只允许输入数字。本文将介绍几种常用的方法,在WinForm TextBox中只能输入数字。
方法一:使用KeyPress事件
我们可以使用KeyPress事件来限制用户输入的内容,只允许数字输入。具体实现方法是:在TextBox的KeyPress事件中添加如下代码:
```csharp
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back)
{
e.Handled = true;
}
}
```
上面的代码中,通过char.IsDigit方法判断按键是否为数字或者是退格键,如果是数字或退格键则不进行处理,否则将e.Handled属性设置为true,表示该键不被接受,从而限制输入内容。
示例:
![方法一示例](https://img-blog.csdn.net/20181030114501230?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RoaXJkYXlfaGFuZGxpbmdfMTk5NDAzMTU1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
方法二:使用TextChanged事件
我们可以订阅TextBox的TextChanged事件,在该事件中判断TextBox中的文本是否为数字,如果不是,就将TextBox清空。下面是实现代码:
```csharp
private void textBox2_TextChanged(object sender, EventArgs e)
{
if (System.Text.RegularExpressions.Regex.IsMatch(textBox2.Text.Trim(), "[^0-9]"))
{
textBox2.Text = "";
}
}
```
上面代码中,使用正则表达式判断TextBox中的文本是否为数字,如果不是则将TextBox清空。
需要注意的是,如果TextBox中的文本不是数字,通过上述代码清空TextBox中的文本后,TextChanged事件会再次被调用,陷入死循环。因此,应该在清空时临时取消TextChanged事件订阅,再重新订阅。下面是修改后的代码:
```csharp
private void textBox2_TextChanged(object sender, EventArgs e)
{
if (System.Text.RegularExpressions.Regex.IsMatch(textBox2.Text.Trim(), "[^0-9]"))
{
this.textBox2.TextChanged -= new System.EventHandler(this.textBox2_TextChanged);
textBox2.Text = "";
this.textBox2.TextChanged += new System.EventHandler(this.textBox2_TextChanged);
}
}
```
示例:
![方法二示例](https://img-blog.csdn.net/20181030114646402?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RoaXJkYXlfaGFuZGxpbmdfMTk5NDAzMTU1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
方法三:使用MaskedTextBox控件
MaskedTextBox控件是WinForm中专门用于限制用户输入格式的控件。我们可以设置Mask属性来限制用户只能输入数字。具体实现方法如下:
1. 拖动MaskedTextBox控件到窗体上
2. 选中MaskedTextBox控件,打开属性窗口,找到Mask属性,设置为数字格式,例如:"00000"
示例:
![方法三示例1](https://img-blog.csdn.net/20181030114806332?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RoaXJkYXlfaGFuZGxpbmdfMTk5NDAzMTU1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
此时只能输入数字,否则将无法输入。
![方法三示例2](https://img-blog.csdn.net/2018103011501641?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RoaXJkYXlfaGFuZGxpbmdfMTk5NDAzMTU1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
方法四:自定义控件
如果我们要多次使用只允许输入数字的控件,还可以自定义控件。下面是一个简单的示例,在TextBox的基础上封装了只允许输入数字的控件。
1. 新建一个类NumericTextBox,继承自TextBox,添加以下代码:
```csharp
public class NumericTextBox : TextBox
{
public NumericTextBox()
{
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.NumericTextBox_KeyPress);
}
private void NumericTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back)
{
e.Handled = true;
}
}
}
```
2. 把上面定义好的类引入到窗体中,然后就可以像使用TextBox一样使用NumericTextBox了。
示例:
![方法四示例](https://img-blog.csdn.net/20181030115718432?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RoaXJkYXlfaGFuZGxpbmdfMTk5NDAzMTU1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
本文介绍了四种限制WinForm TextBox中只能输入数字的方法:使用KeyPress事件、使用TextChanged事件、使用MaskedTextBox控件、自定义控件。读者可以根据具体业务需求选择不同的方法来实现。
壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。
我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!
发表评论 取消回复