Можете ли вы использовать общие формы в C #?

c# .net winforms

10614 просмотра

3 ответа

98220 Репутация автора

Вы должны быть в состоянии создать общую форму:

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

Действителен C #, и компилируется. Однако конструктор не будет работать, и форма выдаст исключение времени выполнения, если у вас есть изображения, указывающие, что он не может найти ресурс.

Я думаю, это потому, что конструктор форм Windows предполагает, что ресурсы будут храниться под именем простого типа.

Автор: Keith Источник Размещён: 14.08.2008 11:30

Ответы (3)


0 плюса

98220 Репутация автора

У меня есть способ обойти это, что работает, но не идеально:

Добавьте в проект новый класс, который наследует форму с ее простым именем.

internal class MyGenericForm:
    MyGenericForm<object> { }

Это означает, что, хотя разработчик все еще не прав, ожидаемый простой тип (т.е. без <>) все еще найден.

Автор: Keith Размещён: 14.08.2008 11:32

20 плюса

168402 Репутация автора

Решение

Да, ты можешь! Вот сообщение в блоге, которое я сделал некоторое время назад с уловкой:

Разработка общих форм

Изменить: Похоже, вы уже делаете это таким образом. Этот метод работает хорошо, поэтому я не считаю его слишком хакерским.

Автор: Matt Hamilton Размещён: 14.08.2008 11:33

0 плюса

156 Репутация автора

Вы можете сделать это в три этапа.

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
{
}    
Автор: Ali Osman Yavuz Размещён: 23.07.2019 11:21
32x32