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 仍然为空。如果我将“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

为什么不简单地让 customShow 返回一个新的 Form 实例,而不是填写一个 ref/out 参数?真的没有理由有一个带有 void 函数的单独的参数。

顺便说一句,我也将替换customShowbuildCustomForm,并将实际Show()方法保存到最后。否则可能会令人困惑。

于 2012-11-11T06:21:06.083 回答