Můžete použít obecné formulářů v jazyce C #?

hlasů
29

Byste měli být schopni vytvořit generické formuláře:

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

Platí C #, a sestavuje. Nicméně designer nebude fungovat a formulář bude hodit výjimku běhu, pokud máte nějaké obrazy uvádějící, že nemůže najít zdroj.

Myslím, že to je proto, že Windows Forms designer předpokládá, že zdroje budou uložena pod názvem Nejjednodušším typem je.

Položena 14/08/2008 v 12:30
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
18

Ano můžeš! Zde je blog post jsem se před chvílí s trikem:

Navrhování Generic Formuláře

Edit: Vypadá to, že už jste to dělat tímto způsobem. Tato metoda funguje dobře, takže bych to považují za příliš hacky.

Odpovězeno 14/08/2008 v 12:33
zdroj uživatelem

hlasů
0

Můžete to udělat ve třech krocích.

1) Výměna Form1.cs soubor

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

2) nahradit 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>));
Odpovězeno 23/07/2019 v 14:21
zdroj uživatelem

hlasů
0

Mám hack k řešení tohoto, který funguje, ale není ideální:

Přidání nové třídy do projektu, který zdědí formulář s jejím prostým názvem.

internal class MyGenericForm:
    MyGenericForm<object> { }

To znamená, že i když je designer je to stále špatně (tedy bez očekávaný jednoduchý typ <>) je stále nalézt.

Odpovězeno 14/08/2008 v 12:32
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more