2012-07-28 74 views
0

當我嘗試一個沒有字符的正則表達式時,我的winforms EnterValue在if語句後仍然被觸發,我怎麼能在觸發器之後停止它呢?從方法if語句後的輸入驗證

private void EnterValue_Click(object sender, EventArgs e) 
    { 
     if (textBox1.Text != string.Empty && !Regex.IsMatch(textBox1.Text, @"^[0-9]+$")) 
     { 
      MessageBox.Show("Please only enter numbers"); 
      textBox1.Clear(); 
     } 

     //convert input to double 
     listDouble.Add(Convert.ToDouble(textBox1.Text)); // this line still throws exception 
     textBox1.Clear(); 
     //clear existing items 
     listBox1.Items.Clear(); 
     // clear any existing list items 
     for (int i = 0; i < listDouble.Count; i++) 
     { 
      listBox1.Items.Add(listDouble[i]); 
     } 
     //for each value added, add this to our list 
    } 
+0

您應該*只*使用'驗證'事件進行輸入驗證,沒有別的。這是執行驗證的唯一正確時間點。 'Click'是錯誤的。另外,用'string.Empty'進行平等測試是多餘的,即使不是,也不要使用'string.Empty',使用'「」' - 它更短,*至少*可讀。畢竟,你不使用'int.Zero'。 – 2012-07-28 11:45:35

回答

3

返回:

if (textBox1.Text != string.Empty && !Regex.IsMatch(textBox1.Text, @"^[0-9]+$")) 
{ 
    MessageBox.Show("Please only enter numbers"); 
    textBox1.Clear(); 
    return; // nothing after this will execute 
} 

如果if謂詞是真,這將只執行,並且該方法將盡快return;語句已被打回,沒有任何其他的代碼正在運行。

1

第一種選擇是使用return

if (textBox1.Text != string.Empty && !Regex.IsMatch(textBox1.Text, @"^[0-9]+$")) 
    { 
     MessageBox.Show("Please only enter numbers"); 
     textBox1.Clear(); 
     return; // exit method 
    } 

第二個選擇是使用else

if (textBox1.Text != string.Empty && !Regex.IsMatch(textBox1.Text, @"^[0-9]+$")) 
    { 
     MessageBox.Show("Please only enter numbers"); 
     textBox1.Clear(); 
    } 
    else 
    { 
     // your statements 
    } 
+1

我更喜歡第一種方法,因爲它減少了其他代碼的縮進級別。 – Oded 2012-07-28 11:41:05

+0

我同意,我個人會使用'return'。我想表明,這也可以使用'if else else {}'語句完成。 – Zbigniew 2012-07-28 11:43:10

+0

我過去比較喜歡'return'方法,但現在不行了。如果你返回,那麼很難看到函數的其他部分有時只會執行。 return語句的工作原理與goto語句幾乎相同,並且隱藏了代碼流。 – alaeus 2012-07-28 17:24:32

1

使用Decimal.TryParse。並使用return從目前的方法進行校驗條件退出後:

return聲明終止於它出現的控制權返回給調用方法的方法的執行。

Decimal dec; 
if (!Decimal.TryParse(textBox1.Text, out dec)) 
{ 
    MessageBox.Show("Please only enter numbers"); 
    textBox1.Clear(); 
    return; 
} 
+0

雙打呢? – 2012-07-28 11:49:48

+0

@JungleBoogie:我將'int'改爲'Decimal'。 – Ria 2012-07-28 11:50:59

+0

你應該事先測試。 – 2012-07-28 11:51:29