簡體   English   中英

你能在 C# 中使用泛型表單嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM