2013-05-19 32 views
3

我試圖創建一個標準方法來打開基於傳遞給它的參數的窗體。基本上,完成這件事:如何在方法中打開表單作爲參數傳遞其名稱

using (Quotes newQte = new Quotes()) 
{ 
    newQte.ShowDialog(); 
} 

通過更換:

Quotes with a passed parameter, e.g. FormToOpen. 

這是在所有可能的?

+0

你說的與傳遞的參數,例如_replacing意味着行情FormToOpen_? –

+0

我的意思是包含要打開的表單的名稱或對其的適當引用的參數。 – PeterJ

+0

你是否想像''FormToOpen''傳遞一個字符串(不是類型安全的),或者你想傳遞一個'Func'委託的實例,像'()=> new FormToOpen()'。 –

回答

4

使用「Factory Method」可以這樣做。

你會定義FormToOpen這樣的(我是重命名爲createForm()爲清楚起見):

Func<Form> createForm; 

因此,代碼會是這個樣子:

private void MakeAndDisplayForm(Func<Form> createForm) 
{ 
    using (var form = createForm()) 
    { 
     form.ShowDialog(); 
    } 
} 

你會這樣稱呼它此:

MakeAndDisplayForm(() => new MyForm()); 

MyForm是形式噸類型您想要創建的帽子MakeAndDisplayForm()

做這種事情是相當普遍的;通常你會將創建者函數傳遞給類的構造函數。然後,該類稍後使用創建者函數創建可以使用的東西,而不知道它們是如何創建的。

這是Depencency Injection的一種形式。

免責聲明:所有錯誤檢查省略掉了簡潔

+0

輝煌!非常感謝。這正是我需要的。馬修你是我的英雄! – PeterJ

2

創建,創建要顯示形式的方法,基於參數:

public static Form CreateAppropriateForm(int formToOpen) 
{ 
    switch (formToOpen) { 
     case 0: 
      return new Quotes(); 
     case 1: 
      return new Citations(); 
     case 2: 
      return new References(); 
     default: 
      throw new ArgumentException("Invalid parameter value."); 
    } 
} 

QuotesCitationsReferences將是你的表單類,從Form的。

然後,當你想展示你的表格,你可以調用該方法:

using (Form form = CreateAppropriateForm(2)) { 
    form.ShowDialog(); 
} 

這裏用的價值2的例子所示 - 但你可以自由地插入產生可用於值任何其他表達式你的表格選擇方法。

當然,如果這適用於您的應用程序,您也可以以更有意義的方式聲明formToOpen。例如,您可以將其聲明爲自定義enum類型,其中每個enum值表示特定的表單。

+0

非常感謝您的寶貴意見! – PeterJ

相關問題