2011-11-05 48 views
0

我有一个窗体上的文本框和一个窗体上的按钮。在按钮单击事件我想坚持该文本框有一个Double形式的值。我到目前为止是这样的 -如何坚持一个文本框有一个值

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方法是假的怎么办。我想要的是程序执行停止,直到在文本框中输入一个合适的值。我该怎么做到这一点?感谢所有帮助。

+0

噢,我应该说,也许上述方法不是解决问题的方法,我只是认为它可能有助于显示我迄今为止的代码。 – user995689

+0

请标记答案是,如果你有答案 –

回答

1

在我看来,你正在验证文本框的内容。因此,您可以使用TextBox控件的验证事件。可以选择将errorProvider控件连接到它以特别关注错误(闪烁的感叹号)。除非输入double,否则“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; 
     } 
    } 
+1

正确的想法。但请注意,当用户从未将注意力集中在控件上时,这不起作用。 –

+0

汉斯确实如此。在按钮点击事件上实现ValidateChildren可能有助于克服此问题 – tazyDevel

0

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

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

一旦您确认该值确实是双倍值,那么您可以启用该按钮。 这种方式默认情况下暂停程序执行,除非输入double。

0

你只需要,如果你的价值不是双重这种方法回报,你0.0的TryParse侑值:

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; 
} 
0

你的代码是除了以下变化细微

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; 
} 

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