32

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

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

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

我认为这是因为 Windows 窗体设计器假定资源将存储在简单类型的名称下。

4

4 回答 4

21

是的你可以!这是我不久前用这个技巧写的一篇博文:

设计通用表单

编辑:看起来你已经这样做了。这种方法效果很好,所以我不会认为它太 hacky。

于 2008-08-14T11:33:21.377 回答
0

我有一个解决这个问题的方法,它有效但并不理想:

向项目中添加一个新类,该类以其简单名称继承表单。

internal class MyGenericForm:
    MyGenericForm<object> { }

这意味着尽管设计者仍然是错误的,但<>仍然可以找到预期的简单类型(即没有 )。

于 2008-08-14T11:32:45.137 回答
0

您可以分三个步骤完成。

1) 在 Form1.cs 文件中替换

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

2) 在 Form1.Designer.cs 中替换

 partial class Form1<TEntity, TContext>

3)创建新文件:Form1.Generic.cs(用于打开设计)

partial class Form1
{
}    
于 2019-07-23T11:21:12.997 回答
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);
于 2020-02-04T09:03:29.703 回答