[英]Can you use generic forms in C#?
您應該能夠創建一個通用表單:
public partial class MyGenericForm<T> :
Form where T : class
{
/* form code */
public List<T> TypedList { get; set; }
}
是有效的 C#,並編譯。 但是,如果您有任何圖像表明它找不到資源,則設計器將無法工作,並且表單將引發運行時異常。
我認為這是因為 windows 窗體設計器假定資源將存儲在簡單類型的名稱下。
我有一個 hack 來解決這個問題,它有效但並不理想:
向項目中添加一個新類,該類繼承具有簡單名稱的表單。
internal class MyGenericForm:
MyGenericForm<object> { }
這意味着盡管設計者仍然是錯誤的,但仍然可以找到預期的簡單類型(即沒有<>
)。
您可以分三步完成。
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
{
}
如果舊石器時代的密碼不會讓你害怕
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.