您应该能够创建通用表单:
public partial class MyGenericForm<T> :
Form where T : class
{
/* form code */
public List<T> TypedList { get; set; }
}
是有效的C#,并编译。但是,如果您有任何图像表明它无法找到资源,那么设计器将无法工作,表单将抛出运行时异常。
我认为这是因为windows表单设计器假定资源将以简单类型的名称存储。
答案 0 :(得分:20)
答案 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);