簡體   English   中英

如果將其名稱作為參數傳遞,如何在方法中打開表單

[英]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.");
    }
}

QuotesCitationsReferences將是您的表單類,派生自Form

然后,您可以在要顯示表單時調用該方法:

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

這里以值2的示例顯示 - 但您可以自由插入任何其他表達式,這些表達式產生可用於表單選擇方法的值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM