【问题标题】:How to insist that a textbox has a value如何坚持文本框具有值
【发布时间】:2011-11-05 22:19:19
【问题描述】:

我在表单上有一个文本框,在同一个表单上有一个按钮。在按钮单击事件上,我想坚持文本框具有双精度形式的值。到目前为止我所拥有的是 -

 public double getUnitStake(Form frontpage)
    {

        double doubleresult=0;
        bool unitStake;

        foreach (Control c in frontpage.Controls)
        {
            if (c.Name == "tbUnitStake")
            {

                unitStake = double.TryParse( (c as TextBox).Text, out doubleresult);
                if (!unitStake)
                {

                }
                else
                {
                    doubleresult=double.Parse((c as TextBox).Text);

                }



            }
        }


        return doubleresult;
    }

但是对于我的生活,如果 double.tryparse 方法为假,我不知道该怎么办。我想要的是程序执行停止,直到在文本框中输入了合适的值。请问我怎样才能做到这一点?感谢所有帮助。

【问题讨论】:

  • 哦,我应该说,也许上述方法不是解决问题的方法,我只是认为它可能有助于展示我到目前为止的代码。
  • 如果您得到答案,请标记为是

标签: c# winforms textbox


【解决方案1】:

在我看来,您正在验证文本框的内容。因此,您可以使用 TextBox 控件的验证事件。可以选择将 errorProvider 控件连接到它,以特别关注错误(闪烁的感叹号)。 “e.Cancel”语句将阻止您对表单执行任何其他操作,直到输入双精度。

   private void textBox1_Validating(object sender, CancelEventArgs e)
    {
        double doubleresult = 0;

        bool result = Double.TryParse(textBox1.Text, out doubleresult);

        if (result)
        {
            errorProvider1.SetError(textBox1, string.Empty);
        }
        else
        {
            errorProvider1.SetError(textBox1, "Must be a Double");
            e.Cancel = true;
        }
    }

【讨论】:

  • 正确的想法。但请注意,当用户从未将焦点设置到控件时,这将不起作用。
  • 汉斯这确实是真的。在按钮点击事件上实现 ValidateChildren 可能有助于克服这个问题
【解决方案2】:

我不知道您的程序的完整要求。

您可以默认禁用该按钮。在文本框的文本更改事件中,检查输入的值是否为双精度值。

一旦您确认该值确实是双精度值,您就可以启用该按钮。 这样程序执行默认停止,除非输入一个双精度。

【讨论】:

    【解决方案3】:

    您的代码很好,除了以下更改

     public double getUnitStake(Form frontpage)
    {
    
        double doubleresult=0;
        bool unitStake;
    
        foreach (Control c in frontpage.Controls)
        {
            if (c.Name == "tbUnitStake")
            {
    
                unitStake = double.TryParse( (c as TextBox).Text, out doubleresult);
            }
        }
    
    
        return doubleresult;
    }
    

    您不需要再次解析“doubleresult”,因为 tryparse 已经完成了。您可以使用 unitStake 变量以供进一步使用。

    【讨论】:

      【解决方案4】:

      如果你的值不是双倍,你只需要 TryParse 你的值,这个方法返回 0.0:

      public double getUnitStake(Form frontpage)
      {
      
          double doubleresult=0;
      
      
          foreach (Control c in frontpage.Controls)
          {
              if (c.Name == "tbUnitStake")
              {
      
                  double.TryParse( (c as TextBox).Text, out doubleresult);
              }
          }
      
      
          return doubleresult;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        相关资源
        最近更新 更多