C# 按用户限制组合框输入零

C# 按用户限制组合框输入零,c#,winforms,C#,Winforms,有没有办法将combobox值限制为“0”,因为我的目标值是combobox,所以我将音量值除以目标值,并给出一个被零除的错误。我尝试了这个方法,但没有成功 private void comboBox1_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsNumber(e.KeyChar) && (e.KeyChar != '0')) {

有没有办法将combobox值限制为“0”,因为我的目标值是combobox,所以我将音量值除以目标值,并给出一个被零除的错误。我尝试了这个方法,但没有成功

private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsNumber(e.KeyChar) && (e.KeyChar != '0'))
            {
                e.Handled = true;
            }

        }

简单的方法是处理
TextChanged
事件并将其重置回以前的值。 或者如评论中所建议的,不允许用户输入值,只需让用户从列表中选择(DropDownList样式)


我提出这个解决方案,因为处理按键事件是一个噩梦,你需要检查以前的值、复制+粘贴菜单、Ctrl+V快捷键等。

简单的方法是处理
文本更改事件并将其重置回以前的值。
或者如评论中所建议的,不允许用户输入值,只需让用户从列表中选择(DropDownList样式)

我建议使用此解决方案,因为处理关键事件是一场噩梦,您需要检查以前的值、复制+粘贴菜单、Ctrl+V快捷方式等。

您可以尝试以下方法:

    private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsNumber(e.KeyChar)
            || (e.KeyChar == '0'
                && this.comboBox1.Text.Length == 0))
        {
            e.Handled = true;
        }
    }
您可以尝试以下方法:

    private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsNumber(e.KeyChar)
            || (e.KeyChar == '0'
                && this.comboBox1.Text.Length == 0))
        {
            e.Handled = true;
        }
    }

如果您确实希望使用此事件来阻止零的条目,那么请考虑以下内容:

private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsNumber(e.KeyChar))
    {
        e.Handled = true;
        return;
    }

    if (e.KeyChar == '0')
    {
        if (comboBox1.Text == "")
        {
            e.Handled = true;
            return;
        }
        if (int.Parse(comboBox1.Text) == 0)
        {
            e.Handled = true;
            return;
        }
    }
}

代码可以稍微整理一下,但希望它显示了一种阻止前导零的简单方法——我想这就是您所追求的。当然,如果逻辑正确的话,子句都可以组合成一个单元格。

< P>如果你确实希望使用这个事件来阻止零的条目,那么考虑下面的内容:

private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsNumber(e.KeyChar))
    {
        e.Handled = true;
        return;
    }

    if (e.KeyChar == '0')
    {
        if (comboBox1.Text == "")
        {
            e.Handled = true;
            return;
        }
        if (int.Parse(comboBox1.Text) == 0)
        {
            e.Handled = true;
            return;
        }
    }
}

代码可以稍微整理一下,但希望它显示了一种阻止前导零的简单方法——我想这就是您所追求的。当然,如果逻辑正确,这些子句可以组合成一个单独的子句。

您只需要输入为零?或者阻止用户输入零?阻止用户输入零如果用户输入
10
?您是否需要允许?除了0之外,每个数字都应该被允许,因为任何被零除的东西都会给我一个错误。为什么您允许用户在组合框中输入?组合框用于从定义的列表中选择值?你看的是错误的事件。在所选索引更改事件上选择以计算体积。您将永远不会将0放入组合框中,因此您将永远不会在所选索引更改中获得0您只需要输入为零?或者阻止用户输入零?阻止用户输入零如果用户输入
10
?您是否需要允许?除了0之外,每个数字都应该被允许,因为任何被零除的东西都会给我一个错误。为什么您允许用户在组合框中输入?组合框用于从定义的列表中选择值?你看的是错误的事件。在所选索引更改事件上选择以计算体积。您将永远不会将0放入组合框,因此您将永远不会在所选索引更改+1上获得0,以便将事件更改为TextChanged,并使用previousText捕获块覆盖(其他答案中按键建议中的“!IsNumber”将阻止删除键开始)。@Nick不仅删除键,还返回空格,选择全部并替换为一些字符等等,这种方法需要解决的问题太多了,以后可能会把你搞砸。此操作不会在任何时候失败。请确认:)+1将事件更改为TextChanged,并使用previousText捕获块覆盖(其他答案中按键建议中的“!IsNumber”将阻止删除键开始)。@Nick不仅删除键,还使用退格,选择全部并替换为一些字符等等,这种方法需要解决的问题太多了,以后可能会把你搞砸。这不会在任何时候失败(请注意:)