2008-08-31 20 views
6

所以現在我的項目有一些自定義對話框,可以像提示用戶提供他的生日一樣,或者其他什麼。現在他們只是做一些事情,如設置this.Birthday屬性,一旦他們得到一個答案(這是類型DateTime?,空指示「取消」)。然後,調用者檢查它創建的對話框的Birthday屬性以確定用戶應答的內容。有沒有一種標準的方法來從Windows窗體中的自定義對話框返回值?

我的問題是,有沒有一個更標準的模式來做這樣的事情?我知道我們可以設置this.DialogResult爲基本的確定/取消的東西,但是在Windows窗體中是否有一種更通用的方式來表示「這是我收集的數據」?

回答

9

我會說暴露你的自定義對話框屬性是慣用的方式,因爲這是標準對話框(如選擇/ OpenFileDialog)如何做到這一點。有人可能會認爲它更明確,並且意圖揭示具有返回所需結果的ShowBirthdayDialog()方法,但遵循框架模式可能是明智的選擇。

+0

讓ShowBirthdayDialog()方法返回Cancel或OK返回將會更實用。按照框架的模式使用屬性絕對會更好。 很好的答案。 – 2008-09-25 11:27:30

0

我一直按照你描述的方式完成它。我很好奇,看看是否有更爲接受的方法。

3

有沒有更像標準的模式?

不,這聽起來像是你正在使用正確的方法。

如果對話框返回DialogResult.OK,則假定對話框中所有必需的屬性都是有效的。

2

對於我來說,堅持使用對話框返回標準對話框響應,然後通過屬性訪問結果是一條路。從

兩個很好的理由,我坐下:

  1. 一致性 - 你總是做同樣的事情用一個對話框,問題的性質表明,模式是很好的( - :雖然同樣的問題是否這是一個好的模式?
  2. 它允許從對話框中返回多個值 - 好的,這裏也有全新的討論,但實用主義意味着這是人們在某些情況下並不總是合適或需要打包只是爲了讓你可以一次過把它們傳回去。

邏輯的流程是太好:

if (Dialog == Ok) 
{ 
    // Do Stuff with the entered values 
} 
else 
{ 
    // Respond appropriately to the user cancelling the dialog 
} 

它一個很好的問題 - 我們應該質疑這樣的東西 - 但對我來說,目前的格局是一個體面的一個。

墨菲

1

對於模態輸入對話框,我通常超載的ShowDialog並通過OUT參數,爲我所需要的數據。

DialogResult ShowDialog(out datetime birthday) 

我通常發現它更容易發現和了解VS與100+的Form類混合暴露我的財產。

對於窗體,我通常有一個Controller和一個IView接口,它使用只讀屬性來傳遞數據。

相關問題