你能在C#中使用通用表格吗?

时间:2008-08-14 11:30:55

标签: c# .net winforms

您应该能够创建通用表单:

public partial class MyGenericForm<T> :
    Form where T : class
{
    /* form code */
    public List<T> TypedList { get; set; }
}

是有效的C#,并编译。但是,如果您有任何图像表明它无法找到资源,那么设计器将无法工作,表单将抛出运行时异常。

我认为这是因为windows表单设计器假定资源将以简单类型的名称存储。

4 个答案:

答案 0 :(得分:20)

是的,你可以!这是我前一段时间制作的博客文章:

Designing Generic Forms

编辑:看起来你已经这样做了。这种方法运行正常,所以我不会认为它过于苛刻。

答案 1 :(得分:0)

我有一个黑客可以解决这个问题,但有效但不理想:

将新类添加到继承具有简单名称的表单的项目中。

internal class MyGenericForm:
    MyGenericForm<object> { }

这意味着虽然设计师仍然错了,但仍然可以找到预期的简单类型(即没有<>)。

答案 2 :(得分:0)

您可以通过三个步骤进行操作。

1)替换Form1.cs文件

public partial class Form1<TEntity, TContext> : Formbase // where....

2)替换Form1.Designer.cs

 partial class Form1<TEntity, TContext>

    private void InitializeComponent()
    {
        //3) Replace ComponentResourceManager params
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1<TEntity,TContext>));

答案 3 :(得分:0)

如果旧石器时代的代码不令您失望

    public  static MyForm GetInstance<T>(T arg) where T : MyType
{
    MyForm myForm = new MyForm();

    myForm.InitializeStuffs<T>(arg);
    myForm.StartPosition = myForm.CenterParent;

    return myForm;
}

使用

var myFormInstance = MyForm.GetInstance<T>(arg);                                                                      myFormInstance.ShowDialog(this);