[英]How do I open a form in a method if passed its name as a parameter
我正在嘗試創建一個標准方法來打開基於傳遞給它的參數的表單。 基本上,要做到這一點:
using (Quotes newQte = new Quotes())
{
newQte.ShowDialog();
}
通過替換:
Quotes with a passed parameter, e.g. FormToOpen.
這是可能嗎?
可以使用“ 工廠方法 ”來執行此操作。
您可以像這樣定義FormToOpen createForm()
為了清楚起見,我將它重命名為createForm()
):
Func<Form> createForm;
所以代碼看起來像這樣:
private void MakeAndDisplayForm(Func<Form> createForm)
{
using (var form = createForm())
{
form.ShowDialog();
}
}
你會這樣稱呼它:
MakeAndDisplayForm(() => new MyForm());
MyForm
是您希望MakeAndDisplayForm()
創建的表單類型。
做這種事情是相當普遍的; 通常將創建者函數傳遞給類的構造函數。 然后,該類稍后使用創建函數來創建它可以使用的東西,而不知道它們是如何創建的。
這是Depencency Injection的一種形式。
( 免責聲明:所有錯誤檢查都是為了簡潔而省略 )
根據參數創建一個創建要顯示的表單的方法:
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.");
}
}
Quotes
, Citations
和References
將是您的表單類,派生自Form
。
然后,您可以在要顯示表單時調用該方法:
using (Form form = CreateAppropriateForm(2)) {
form.ShowDialog();
}
這里以值2
的示例顯示 - 但您可以自由插入任何其他表達式,這些表達式產生可用於表單選擇方法的值。
當然,如果適合您的應用程序,您還可以以更有意義的方式聲明formToOpen
。 例如,您可以將其聲明為自定義enum
類型,其中每個enum
值表示特定形式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.