1

私はC#で関数を作成しました:

private void customShow(Form someForm, Type formType) {
    if (someForm == null || someForm.IsDisposed) someForm = (Form)Activator.CreateInstance(formType);
    someForm.StartPosition = FormStartPosition.CenterScreen; 
    someForm.MdiParent = this;
    someForm.Show();
    someForm.WindowState = FormWindowState.Maximized;
}

そして、私はこれをやりたかった:

private void mnuKategori_Click(object sender, EventArgs e) {
    customShow(frmKategori, typeof(Master.FrmKategori));
    frmKategori.isCRUD = true;
}

メソッドの実行後も変数frmKategoriがnullのままであるため、メソッドの2行目で失敗しました。「someForm」引数を参照すると、C#が「ref」および「out」キーワードを使用したポリモーフィズムをサポートしていないように見えるため、失敗します。誰かがこれについて提案がありますか?返信ありがとうございます。

4

2 に答える 2

5

ジェネリックス?

private void customShow<T>(ref T someForm) where T : Form, new()
{
    if (someForm == null || someForm.IsDisposed) someForm = new T();
    someForm.StartPosition = FormStartPosition.CenterScreen; 
    someForm.MdiParent = this;
    someForm.Show();
    someForm.WindowState = FormWindowState.Maximized;
}

そして、私はこれをやりたかった:

private void mnuKategori_Click(object sender, EventArgs e)
{
    customShow(ref frmKategori);
    frmKategori.isCRUD = true;
}
于 2012-11-11T06:22:22.533 に答える
2

ref / outパラメータを入力するのではなく、customShowにFormの新しいインスタンスを返すようにしないのはなぜですか?void関数を使用して単一の出力パラメーターを使用する理由は実際にはありません。

ちなみに、私もに置き換えcustomShowbuildCustomForm、最後まで実際のShow()メソッドを保存します。そうしないと混乱する可能性があります。

于 2012-11-11T06:21:06.083 に答える