2012-06-30 22 views
0

這裏的情況:我在我的程序中調用一個void函數,它提供了一個消息框與確定和取消,但這個函數被封裝。我需要知道用戶點擊了什麼。是否有任何區別返回無效和不返回在一個void函數

那麼反正我有劫持到這個函數來知道用戶的選擇嗎?

或者我認爲當程序員編寫這個函數時,當用戶點擊Cancel時他必須返回一個void,並且當用戶點擊OK時它不返回任何東西。這是可能的,我可以區分這兩個行爲 - 返回void和不返回任何東西?

我知道這似乎是不可能的,但這就是爲什麼我來stackoverflow問你們。

謝謝

+1

你爲什麼要堅持這個函數的簽名?請具體在你的確切範圍內,我們可能來一個好的設計 – Alireza

+1

啊,System.Void的奧祕,一個實際的類型:) –

回答

0

「返回void」(你會寫return;)是完全一樣沒有回來。

你想返回類似DialogResult的東西。 .NET框架經常使用DialogResult.OKDialogResult.Cancel來執行您想要的操作。

2

返回void的函數只有一個返回 - 什麼也沒有 - 因此沒有任何返回或返回void之間沒有區別。

如果您無法更改現有功能,並且所有功能都顯示一個MessageBox,我會放棄它並重新開始,如果我是您的話。

你想要的是一樣的東西:

public DialogResult GetDialogResult(string message, string caption) 
{ 
    return MessageBox.Show(message, caption, MessageBoxButtons.OKCancel); 
} 

調用你想要的消息和標題,你會得到任DialogResult.OKDialogResult.Cancel

如果它超過一回只是顯示MessageBox,您唯一的選擇是檢查功能在單擊OK時是否發生任何變化,例如:

  • 如果添加記錄t OA數據庫僅當按下OK,檢查該記錄
  • 如果對象的狀態發生改變,檢查是否有變化:

    OtherObject.SetValueIfOK(2); 
    if (OtherObject.GetValue() == 2) 
    { 
        // OK was clicked 
    } 
    else 
    { 
        // Cancel was clicked 
    } 
    

別的,我想你可能出運氣。

+0

是的,但問題是我不能改變現有的功能......有一些它實現的其他功能,所以我不能用一個消息框替換現有的功能... –

+0

@ QiaoMeng我在答案的底部添加了另一個選項,如果這沒有幫助,我認爲你可能運氣不好而不要求功能的提供者進行增強 –

相關問題