C# 输入字符时,禁止继续在文本框中键入

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

我有一个文本框,用户应该在其中键入价格。 如果价格以0开头,我需要防止继续键入。 例如,用户不能键入“000”或“00009”

我在按键上试过,但什么也没试过

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)