2013-05-16 51 views
3

我有兩個不同的按鈕點擊呼叫同一功能的修改版本...如果一個無效函數返回,那麼如何停止下一個函數調用的執行?

private void button1_Click(object sender, EventArgs e) 
{ SendEmail(); } 

private void button2_Click(object sender, EventArgs e) 
{ SendRevisedEmail();} 



public void SendEmail() 
{ 
    DataManip(ref item1, ref item2); //This is where I'd like the next 2 functions to not process if this one fails. 
    UpdateDB(ref item1, ref item2); 
    sendTechEmail(ref item1, ref item2); 
} 

public void SendRevisedEmail() 
{ 
    DataManip(ref item1, ref item2); //This is where I'd like the next 2 functions to not process if this one fails. 
    UpdateDB2(ref item1, ref item2); 
    sendRevisedTechEmail(ref item1, ref item2); 
} 

DataManip功能,我在窗體上進行一些檢查,並設置拋出一個彈出消息和返回;如果它不出來flag1 = true

public void DataManip(ref string item1, ref string item2) 
{ 
    bool flag1 = false; 

    foreach (Control c in groupBox1.Controls) 
    { 
    Radiobutton rb = c as RadioButton; 
    if rb != null && rb.Checked) 
    { 
     flag1 = true; 
     break; 
    } 
    } 

    if (flag1 == true) 
    { 
    //Manipulate Data here 
    } 
    else if (flag1 != true) 
    { 
    MessageBox.Show("You didn't check any of these boxes!"); 
    return; 
    }; 
} 

截至目前,DataManip的flag1檢查工作正常。如果缺少groupBox1中的條目,我可以驗證它是否不處理數據更改。

問題是在SendEmail()SendRevisedEmail()函數內,它仍然在DataManip(ref item1, ref item2)之後處理其他函數的調用。

我該如何導致出錯DataManip並阻止/跳過其他兩個函數調用執行?

+3

你爲什麼通過引用傳遞一切?這是不尋常的,這是一個好主意...... –

+0

這樣的行中的星號是什麼:'** DataManip(ref item1,ref item2); **'? – Greg

+0

因爲我只在c#編程了一個星期,而且這似乎是一個好主意...... – BigIrishApe

回答

6

如何導致DataManip出錯並阻止/跳過其他兩個函數調用的執行?

您有幾種選擇:

  • 更改方法返回一個bool。這將允許您返回一個值,無論該方法是否成功。
  • 如果方法「失敗」是一個真正的錯誤,引發一個異常。這將允許調用代碼在需要時捕獲並處理異常,或者如果它不知道如何處理它,就會冒泡。

請注意,您可能需要檢查代碼中的其他一些怪異特性。很少有你應該通過ref傳遞所有信息。另外,在處理數據的相同方法中使用消息框類型通知通常不是一個好主意 - 您可能需要考慮從數據操作中分離驗證/拉取值。

+0

將「public void DataManip(ref string item1,ref string item2)」改爲「public bool DataManip(ref string item1,ref string item2)」會影響它返回的項目嗎? – BigIrishApe

+0

@BigIrishApe您需要返回true或false,但不會更改通過參數更改的值。 –

+0

如果我將它更改爲「public bool DataManip(...)」,我需要爲bool返回添加另一個參數,然後在處理其他2個函數調用之前檢查返回的結果嗎? – BigIrishApe

相關問題