C# 输入字符时,禁止继续在文本框中键入
我有一个文本框,用户应该在其中键入价格。 如果价格以0开头,我需要防止继续键入。 例如,用户不能键入“000”或“00009” 我在按键上试过,但什么也没试过C# 输入字符时,禁止继续在文本框中键入,c#,winforms,C#,Winforms,我有一个文本框,用户应该在其中键入价格。 如果价格以0开头,我需要防止继续键入。 例如,用户不能键入“000”或“00009” 我在按键上试过,但什么也没试过 if (txt.Text.StartsWith("0")) return; Or e.Handeled = true; 您可以为此使用TextChanged-事件 private void textBox1_TextChanged(object sender, EventArgs e) { if (this.tex
if (txt.Text.StartsWith("0"))
return; Or e.Handeled = true;
您可以为此使用
TextChanged
-事件
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (this.textBox1.Text == "0") this.textBox1.Text = "";
}
仅当启动时
文本框
为空时,此操作才有效。您可以使用TextChanged
-事件进行此操作
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (this.textBox1.Text == "0") this.textBox1.Text = "";
}
只有当启动时文本框为空时,这才有效。我自己解决了:
private void txtPrice_KeyPress(object sender, KeyPressEventArgs e)
{
if (txtPrice.Text.StartsWith("0") && !char.IsControl(e.KeyChar))
{
e.Handled = true;
return;
}
}
我自己解决了:
private void txtPrice_KeyPress(object sender, KeyPressEventArgs e)
{
if (txtPrice.Text.StartsWith("0") && !char.IsControl(e.KeyChar))
{
e.Handled = true;
return;
}
}
试试这个:
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;
}
}
private void textBox1\u按键(对象发送器,按键事件参数e)
{
//仅允许数字和(.)以及退格
如果((e.KeyChar<'0'| e.KeyChar>'9')&&e.KeyChar!='\b'&&e.KeyChar!=''))
{
e、 已处理=正确;
}
var txt=发送方作为文本框;
//只允许一个点
if(txt.Text.Contains('.')和&e.KeyChar==(int)'.)
{
e、 已处理=正确;
}
//如果为0,则仅允许0.xxxx
if(txt.Text.StartsWith(“0”)
&&!txt.Text.StartsWith(“0”)
&&e.KeyChar!='\b'
&&e.KeyChar!=(int)“.”)
{
e、 已处理=正确;
}
}
试试这个:
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;
}
}
private void textBox1\u按键(对象发送器,按键事件参数e)
{
//仅允许数字和(.)以及退格
如果((e.KeyChar<'0'| e.KeyChar>'9')&&e.KeyChar!='\b'&&e.KeyChar!=''))
{
e、 已处理=正确;
}
var txt=发送方作为文本框;
//只允许一个点
if(txt.Text.Contains('.')和&e.KeyChar==(int)'.)
{
e、 已处理=正确;
}
//如果为0,则仅允许0.xxxx
if(txt.Text.StartsWith(“0”)
&&!txt.Text.StartsWith(“0”)
&&e.KeyChar!='\b'
&&e.KeyChar!=(int)“.”)
{
e、 已处理=正确;
}
}
当价格以0开头时,拒绝允许任何键入似乎是一种糟糕的用户体验-值得注意的是,如果输入错误,他们可能希望键入一个退格来删除字符。通常首选一种更柔和的方法,突出显示文本框并拒绝提交整个表单,同时允许编辑/更正。是的,用户可以退格和删除,但如果以0开头,则不能键入其他字符。是否为e.handled=true
,您可能需要检查用户输入的数值
,而不是控制字符(backspace,delete…)。当价格以0开头时,拒绝允许任何键入似乎是一种糟糕的用户体验-值得注意的是,如果输入错误,他们可能希望键入backspace以删除字符。通常首选一种更柔和的方法,突出显示文本框并拒绝提交整个表单,同时允许编辑/更正。是的,用户可以退格和删除,但如果以0开头,则不能键入其他字符。是否为e.handled=true
,您可能需要检查用户输入的数值
,而不是控制字符(退格、删除…),我不想在开始时输入0后清空文本框。我只是想阻止在这种情况下继续键入。您仍然可以使用文本更改。我不想在开始时输入0后清空文本框。我只是想防止在这种情况下继续键入。您仍然可以使用文本更改而不是e.KeyChar!='\b’
最好使用!char.IsControl(e.KeyChar)
而不是e.KeyChar!='\b’
最好使用!char.IsControl(例如KeyChar)