C# 具有十进制输入改进的文本框
我有一个文本框,可以获取一个十进制值,比如说C# 具有十进制输入改进的文本框,c#,winforms,textbox,C#,Winforms,Textbox,我有一个文本框,可以获取一个十进制值,比如说10500.00,问题是我的方法是,当你输入一个值,然后输入小数时,它不允许你退格或清除文本框来输入一个新值。。它只是被卡住了。。我曾尝试将该值设置回0.00,但我认为我将其放在了错误的位置,因为它不会改变它。这是我的密码 private void txtTransferAmount_KeyPress(object sender, KeyPressEventArgs e) { bool matchString
10500.00
,问题是我的方法是,当你输入一个值,然后输入小数时,它不允许你退格或清除文本框来输入一个新值。。它只是被卡住了。。我曾尝试将该值设置回0.00,但我认为我将其放在了错误的位置,因为它不会改变它。这是我的密码
private void txtTransferAmount_KeyPress(object sender, KeyPressEventArgs e)
{
bool matchString = Regex.IsMatch(textBoxTransfer.Text.ToString(), @"\.\d\d");
if (matchString)
{
e.Handled = true;
}
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true;
}
// only allow one decimal point
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
e.Handled = true;
}
}
您建议进行什么类型的更改,以便我可以退格或清除文本框并输入新值?最简单的方法是:
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != '\b')
{
e.Handled = true;
}
您可以为Backspace(BS)char(8)设置陷阱,如果找到,则将句柄设置为false 您的代码可能如下所示
....
// only allow one decimal point
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
e.Handled = true;
}
if (e.KeyChar == (char)8)
e.Handled = false;
为了使代码更直观地解释事件处理程序正在执行的操作,您可能需要创建一个表示您正在实现的逻辑的var。类似于
private void txtTransferAmount_KeyPress(object sender, KeyPressEventArgs e)
{
bool ignoreKeyPress = false;
bool matchString = Regex.IsMatch(textBoxTransfer.Text.ToString(), @"\.\d\d");
if (e.KeyChar == '\b') // Always allow a Backspace
ignoreKeyPress = false;
else if (matchString)
ignoreKeyPress = true;
else if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
ignoreKeyPress = true;
else if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
ignoreKeyPress = true;
e.Handled = ignoreKeyPress;
}