2016-11-07 88 views
0

我有一个文本框,用户应该在其中键入一个价格。 如果价格从0开始,则需要防止继续键入。 例如,用户无法键入“000”或“00009”。防止在输入字符时继续在文本框中键入

我在KeyPress上试过这个,但什么都没有!

if (txt.Text.StartsWith("0")) 
     return; Or e.Handeled = true; 
+1

拒绝让任何类型的价格开始时以0似乎是一个不好的用户体验 - 值得注意的是,他们可能要键入如果错误地输入了该字符,则退格*删除该字符。一种比较柔和的方法突出显示文本框并拒绝提交整个表单,同时允许编辑/更正通常是首选。 –

+0

是用户可以退格并删除,但如果以0开头,则不能输入其他字符。 – Nofuzy

+0

应该是'e.Handeled = true'吗? [参考](http://stackoverflow.com/a/2591284/1050927),您可能需要检查用户输入'数字'而不是控制字符(退格,删除...) – Prisoner

回答

2

试试这个:

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; 
    } 
} 
+0

的文本代替'e.KeyChar!='\ b'',最好使用'!char.IsControl(e.KeyChar)' – Nofuzy

0

您可以使用TextChanged -event。

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    if (this.textBox1.Text == "0") this.textBox1.Text = ""; 
} 

这只会在TextBox在启动时为空时有效。

+0

我不想清空开始时输入0后的文本框。我只是想防止在这种情况下继续打字。 – Nofuzy

+0

您仍然可以使用改为 –

0

我解决了它自己:

private void txtPrice_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (txtPrice.Text.StartsWith("0") && !char.IsControl(e.KeyChar)) 
    { 
     e.Handled = true; 
     return; 
    } 
} 
相关问题