【问题标题】:Preventing user from entering zero but allowing other numbers that contain zero阻止用户输入零,但允许其他包含零的数字
【发布时间】:2014-10-09 15:15:41
【问题描述】:

我有一个 TextBox 控件。我已经设置了 TextBox 的 KeyPress 事件,以便用户只允许输入数字:

private void txtbxRecurEveryXWeeks_KeyPress(object sender, KeyPressEventArgs e)
{
   if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
   {
       e.Handled = true;
   }
}

但除此之外,我不希望用户将 TexBot 的值设置为零“0”。但仍应允许他们输入“10”或“3400”作为值。我怎样才能做到这一点?

【问题讨论】:

    标签: c# events keypress


    【解决方案1】:

    最好忽略按键事件并处理丢失焦点事件,并在用户完成输入时检查并确保值不是0

    编辑:有人指出,用户可以键入“000”并失去焦点,这会导致失败。您可以检查并确认文本框有一个值并将其解析为 int 以确认它不是 0。

    private void txtbxRecurEveryXWeeks_LostFocus(object sender, EventArgs e)
    {
        int value;
        if(!string.IsNullOrWhitespace(txtbxRecurEveryXWeeks.Text) 
            && int.TryParse(txtbxRecurEveryXWeeks.Text, out value) 
            && value > 0)
        {
            //Do something like clear the textbox value
        }
    }
    

    【讨论】:

    • 同意最后一点。我会失去焦点,或抱怨提交
    • 是的,我也在提交时添加了它,但在此之前我也应该防止输入零,因为那时我在表单上有另一个标签,上面写着“每 0 周”,这是没有意义的。我会尝试您的解决方案,如果有效,您将得到正确的答案。
    • @GrantWinney 绝对同意。更新为使用int.TryParse
    【解决方案2】:

    假设您使用,请考虑使用NumericUpDown 控件输入数字。它具有Minimum 属性,您可以将其设置为1 以避免零输入。

    【讨论】:

      【解决方案3】:

      使用最小值 = 1 并隐藏向上和向下按钮的 NumericUpDown。

          numericUpDown1.Minimum = 1;
          numericUpDown1.Controls[0].Hide();
      

      【讨论】:

        猜你喜欢
        • 2018-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-21
        相关资源
        最近更新 更多