我有一个文本框,用户应该在其中键入一个价格。 如果价格从0开始,则需要防止继续键入。 例如,用户无法键入“000”或“00009”。防止在输入字符时继续在文本框中键入
我在KeyPress上试过这个,但什么都没有!
if (txt.Text.StartsWith("0"))
return; Or e.Handeled = true;
我有一个文本框,用户应该在其中键入一个价格。 如果价格从0开始,则需要防止继续键入。 例如,用户无法键入“000”或“00009”。防止在输入字符时继续在文本框中键入
我在KeyPress上试过这个,但什么都没有!
if (txt.Text.StartsWith("0"))
return; Or e.Handeled = true;
试试这个:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
//only allow digit and (.) and backspace
if ((e.KeyChar < '0' || e.KeyChar > '9') && e.KeyChar != '\b' && e.KeyChar != '.')
{
e.Handled = true;
}
var txt = sender as TextBox;
//only allow one dot
if (txt.Text.Contains('.') && e.KeyChar == (int)'.')
{
e.Handled = true;
}
//if 0, only allow 0.xxxx
if (txt.Text.StartsWith("0")
&& !txt.Text.StartsWith("0.")
&& e.KeyChar != '\b'
&& e.KeyChar != (int)'.')
{
e.Handled = true;
}
}
的文本代替'e.KeyChar!='\ b'',最好使用'!char.IsControl(e.KeyChar)' – Nofuzy
您可以使用TextChanged
-event。
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (this.textBox1.Text == "0") this.textBox1.Text = "";
}
这只会在TextBox
在启动时为空时有效。
我不想清空开始时输入0后的文本框。我只是想防止在这种情况下继续打字。 – Nofuzy
您仍然可以使用改为 –
我解决了它自己:
private void txtPrice_KeyPress(object sender, KeyPressEventArgs e)
{
if (txtPrice.Text.StartsWith("0") && !char.IsControl(e.KeyChar))
{
e.Handled = true;
return;
}
}
拒绝让任何类型的价格开始时以0似乎是一个不好的用户体验 - 值得注意的是,他们可能要键入如果错误地输入了该字符,则退格*删除该字符。一种比较柔和的方法突出显示文本框并拒绝提交整个表单,同时允许编辑/更正通常是首选。 –
是用户可以退格并删除,但如果以0开头,则不能输入其他字符。 – Nofuzy
应该是'e.Handeled = true'吗? [参考](http://stackoverflow.com/a/2591284/1050927),您可能需要检查用户输入'数字'而不是控制字符(退格,删除...) – Prisoner