我有一个文本框,我在其中输入十进制值,如十进制(6,3)。 如果条件不匹配,则应限制用户输入值。我正在使用以下代码来检查keypress / keydown事件。
try
{
string temp = tbweight.Text;
if (!Regex.IsMatch(temp, @"^\d{1,3}(\.\d{0,3})?$") && !string.IsNullOrEmpty(tbweight.Text))
{
e.Handled = true;
}
}
catch (Exception ex)
{
MessageBox.Show("Error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
但是我没有在temp中插入最后一个字符,因为最后一个字符仍未填入文本框。
如果我在Textchange事件上使用相同的代码,我无法通过输入值来阻止。我也无法使用tryparse,因为我们无法阻止在文本框中输入值。
对此有什么好的解决方案吗?
答案 0 :(得分:0)
试试这个
private bool dot = false;
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (System.Char.IsNumber(e.KeyChar) || e.KeyChar == 8 || e.KeyChar == '.' || e.KeyChar == 13)
{
if (e.KeyChar == '.')
{
if (!dot)
{
dot = true;
e.Handled = false;
}
else
e.Handled = true;
}
else
{
e.Handled = false;
}
}
else if (e.KeyChar == ',')
{
e.Handled = true;
}
}
答案 1 :(得分:0)
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
//e.Handled = true;
e.Handled = Validate(textBox1.Text, e);
}
private static bool Validate(string p, KeyPressEventArgs e)
{
bool valid = false;
try
{
if (System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator == e.KeyChar.ToString())
{
// e.Handled = true;
valid = false;
}
else
{
string t = string.Format("{0}{1}", p, (e.KeyChar));
if (!(Regex.IsMatch(t, @"^\d{1,3}(\.\d{0,3})?$") && !string.IsNullOrEmpty(t)))
{
valid = true;
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return valid;
}