在C#中,仅允许在文本框中输入十进制数。
在C#中,仅允许在文本框中输入十进制数。
我是C#的新手,我想知道如何制作一个只接受数字的文本框。
所以如果你输入一个小数,那就没有问题,但是当你输入其他字符,除了"0,1,2,3,4,5,6,7,8,9或,"之外,我希望它在文本框中被删除。
我认为可以使用KeyDown或TextChanged来实现。
以下是我已经尝试过的方法:
private void txt2011_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) { if (!System.Text.RegularExpressions.Regex.IsMatch("^[0-9]", txt2011.Text)) { txt2011.Text = "0"; } }
提前感谢。
问题的原因是当用户在文本框中输入时,KeyDown
和Text Changed
事件会立即触发。在这种情况下,您甚至看不到您输入的文本,因为文本框内的文本一旦更改,适当的操作就会发生。
解决方法是使用LostFocus
事件,因为它仅在用户离开文本框时触发,然后您可以将其高亮显示并将文本替换为0。
以下是实现上述解决方法的C#代码示例:
private void textBox1_LostFocus(object sender, EventArgs e) { TextBox textBox = (TextBox)sender; decimal value; if (!decimal.TryParse(textBox.Text, out value)) { textBox.Text = "0"; textBox.SelectAll(); } }
在上述示例中,textBox1_LostFocus
是LostFocus
事件的事件处理程序。它首先将发送事件的文本框转换为TextBox
对象。然后,它尝试将文本转换为十进制数,如果转换失败,则将文本设置为"0",并选中所有文本。
通过使用LostFocus
事件而不是KeyDown
或Text Changed
事件,可以确保只有在用户离开文本框时才会进行验证和更改文本的操作。这样,用户可以先输入完整的十进制数,然后在离开文本框后进行验证和更改。
在C#中,有时候我们希望在文本框中只允许输入十进制数。下面给出了一种解决方法。
首先,我们需要订阅文本框的TextChanged事件。可以通过在设计器中双击文本框来实现。当事件发生时,我们需要检查文本框的文本内容。如果为空字符串,直接返回。然后我们尝试将文本转换为double类型。如果无法转换成功,将文本设置为原始文本内容。
在类中定义一个originalText变量,用来存储原始文本。如果转换成功,将原始文本设置为当前文本。
以下是示例代码:
private string originalText; private void textbox1_TextChanged(object sender, EventArgs e) { if (string.IsNullOrEmpty(textbox1.Text)) { return; } try { Convert.ToDouble(textbox1.Text); } catch (FormatException) { textbox1.Text = originalText; return; } originalText = textbox1.Text; }
现在,文本框只能输入十进制数了。