2011-11-05 72 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變量以供進一步使用。