3

渡されたパラメーターに基づいてフォームを開く標準メソッドを作成しようとしています。基本的に、これを行うには:

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

置き換えることにより:

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

これはまったく可能ですか?

4

2 に答える 2

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()

この種のことを行うのはかなり一般的です。多くの場合、作成者関数をクラスのコンストラクターに渡します。次に、そのクラスは後で作成者関数を使用して、どのように作成されたかを知らなくても、使用できるものを作成します。

これは依存性注入の一種です。

(免責事項: 簡潔にするために、すべてのエラー チェックは省略されています)

于 2013-05-19T21:54:10.080 に答える
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.");
    }
}

とは、 から派生したフォームクラスQuotesになります。CitationsReferencesForm

次に、フォームを表示するときにそのメソッドを呼び出すことができます。

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

ここでは値の例を示して2いますが、フォーム選択メソッドで使用できる値を生成する他の式を自由に挿入できます。

もちろん、formToOpenアプリケーションに適している場合は、より意味のある方法で宣言することもできます。たとえば、enumenum値が特定のフォームを表すカスタム型として宣言できます。

于 2013-05-19T21:50:35.523 に答える