Добрый день. Возникла следующая проблемма:
Есть базовый класс:
internal abstract class BaseForm<T> : Form
where T : BaseItem {...}
internal sealed class SpecificForm : BaseForm<MyNode> {}
при наследовании от этого типа, открыть форму (потомка) в дизайнере не получается (MS Visual Studio 2010)
возникает ошибка:
Illegal characters in path.
Instances of this error (1)
Call Stack:
at System.IO.Path.CheckInvalidPathChars(String path)
at System.IO.Path.Combine(String path1, String path2)
at Microsoft.VisualStudio.Platform.VsAppDomainManager.d__1.MoveNext()
at Microsoft.VisualStudio.Platform.VsAppDomainManager.InnerResolveHandler(String name)
at Microsoft.VisualStudio.Platform.VsAppDomainManager.ResolveHandler(Object sender, ResolveEventArgs args)
at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)
вторя ошибка:
The designer could not be shown for this file because none of the classes within it can be designed. The designer inspected the following classes in the file: UnitForm --- The base class 'PTeam.Mediaplan.MediaplanDictionaryItemForm' could not be loaded. Ensure the assembly has been referenced and that all projects have been built.
Call Stack:
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)
если же добавить в ирархию наследование новый (промежуточный) тип:
internal abstract class BaseSpecificForm : BaseForm<MyNode> {}
и унаследовать от этого типа
internal sealed class SpecificForm : BaseSpecificForm {}
то форма SpecificForm открывается в дизайнере форм.
Как можно упростить иерархию наследования и обеспечить возможность редактирование макета формы через встроенный дизайнер MS VisualStudio?
e> internal abstract class BaseForm<T> : Form e> в дизайнере не e> получается (MS Visual Studio 2010) возникает ошибка:
Дизайнер winforms парсит код формы как текст, написан был до появления в
языке всяких <T>, и, похоже, подобное надругательство не осиливает. И
вообще, visual inheritance — это утраченная технология Древних, современному
поколению дизайнерописателей неподвластная.
Posted via RSDN NNTP Server 2.1 beta
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Здравствуйте, Osaka, Вы писали:
e>> internal abstract class BaseForm<T> : Form e>> в дизайнере не e>> получается (MS Visual Studio 2010) возникает ошибка: O>Дизайнер winforms парсит код формы как текст, написан был до появления в O>языке всяких <T>, и, похоже, подобное надругательство не осиливает. И O>вообще, visual inheritance — это утраченная технология Древних, современному O>поколению дизайнерописателей неподвластная.
т.е. получается что generics и Визуальный дизайнер не совместимы?
Здравствуйте, e.slyusar, Вы писали:
ES>Здравствуйте, Osaka, Вы писали:
e>>> internal abstract class BaseForm<T> : Form e>>> в дизайнере не e>>> получается (MS Visual Studio 2010) возникает ошибка:
ES>т.е. получается что generics и Визуальный дизайнер не совместимы?
Совместимы, только через одно место. Надо сделать пустой класс, наследник от BaseForm<T>, с конкретным типом, а
от него уже наследовать свою форму. Это фейковый класс не будет открываться в дизайнере, что пофиг, а своя форма будет:
// file1.cspublic class FakeForm : BaseForm<MyForm>
{
...
}
// file2.cspublic class MyForm : FakeForm
{
...
}
Неудобно и некрасиво, но дочерние формы можно конструировать. А вот если планируется
в BaseForm класть общие контролы, то увы.
Re[3]: Наследование WinForms и Виуальный дизайнер
От:
Аноним
Дата:
05.09.11 08:42
Оценка:
Здравствуйте, e.slyusar, Вы писали:
ES>Здравствуйте, Osaka, Вы писали:
e>>> internal abstract class BaseForm<T> : Form e>>> в дизайнере не e>>> получается (MS Visual Studio 2010) возникает ошибка: O>>Дизайнер winforms парсит код формы как текст, написан был до появления в O>>языке всяких <T>, и, похоже, подобное надругательство не осиливает. И O>>вообще, visual inheritance — это утраченная технология Древних, современному O>>поколению дизайнерописателей неподвластная.
ES>т.е. получается что generics и Визуальный дизайнер не совместимы?
В умелых руках совместимы
см. например WinForms из BL Toolkit
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, e.slyusar, Вы писали:
ES>>Здравствуйте, Osaka, Вы писали:
e>>>> internal abstract class BaseForm<T> : Form e>>>> в дизайнере не e>>>> получается (MS Visual Studio 2010) возникает ошибка: O>>>Дизайнер winforms парсит код формы как текст, написан был до появления в O>>>языке всяких <T>, и, похоже, подобное надругательство не осиливает. И O>>>вообще, visual inheritance — это утраченная технология Древних, современному O>>>поколению дизайнерописателей неподвластная.
ES>>т.е. получается что generics и Визуальный дизайнер не совместимы?
А>В умелых руках совместимы А>см. например WinForms из BL Toolkit
Здравствуйте, bizhan, Вы писали:
B>Здравствуйте, e.slyusar, Вы писали:
ES>>Здравствуйте, Osaka, Вы писали:
e>>>> internal abstract class BaseForm<T> : Form e>>>> в дизайнере не e>>>> получается (MS Visual Studio 2010) возникает ошибка:
ES>>т.е. получается что generics и Визуальный дизайнер не совместимы?
B>Совместимы, только через одно место. Надо сделать пустой класс, наследник от BaseForm<T>, с конкретным типом, а B>от него уже наследовать свою форму. Это фейковый класс не будет открываться в дизайнере, что пофиг, а своя форма будет:
B>
B>Неудобно и некрасиво, но дочерние формы можно конструировать. А вот если планируется B>в BaseForm класть общие контролы, то увы.
да я собственно так и сделал — только на мой взгляд не совсем это красиво, хак какой то получается.
Вот и спрашиваю у многоуважаемого сообщества — может быть кто то решал такую проблему?!
или же ее решать только архитектурно?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, e.slyusar, Вы писали:
ES>>Здравствуйте, Osaka, Вы писали:
e>>>> internal abstract class BaseForm<T> : Form e>>>> в дизайнере не e>>>> получается (MS Visual Studio 2010) возникает ошибка: O>>>Дизайнер winforms парсит код формы как текст, написан был до появления в O>>>языке всяких <T>, и, похоже, подобное надругательство не осиливает. И O>>>вообще, visual inheritance — это утраченная технология Древних, современному O>>>поколению дизайнерописателей неподвластная.
ES>>т.е. получается что generics и Визуальный дизайнер не совместимы?
А>В умелых руках совместимы А>см. например WinForms из BL Toolkit
В BlToolKit тоже через фейковые объекты сделано (или я не то нашел)
public class EditPersonFormBase : BizEntityForm<EditPersonForm, Person> {}
public partial class EditPersonForm : EditPersonFormBase
{
public EditPersonForm()
{
InitializeComponent();
}
protected override void SetBizEntity(Person person)
{
personBinder.Object = person;
}
}