2010-01-12 12 views
12

Mam projekt WinForm i utworzyłem klasę na zespole A, która dziedziczy po System.Windows.Forms.Form, aby służyć jako klasa podstawowa dla różnych formularzy w moim projekcie, klasa bazowa jest coś takiego:Projektant WinForm Visual Studio 2008 nie załaduje formularza, który dziedziczy z klasy ogólnej

public partial class DataForm<T> : Form where T : class 
{ 

    T currentRecord; 

    protected T CurrentRecord 
    { 
     get 
     { 
      return currentRecord; 
     } 
     set 
     { 
      currentRecord = value; 
      CurrentRecordChanged(); 
     } 
    } 
} 

Teraz kiedy utworzyć formularz na montaż B, która dziedziczy z mojego DataForm projektant nie będzie ładować, ale gdybym go skompilować aplikacja działa poprawnie.

Formularz wygląda następująco:

public partial class SomeTableWindow : DataForm<SomeTable> 
{ 
    public SomeTableWindow() 
    { 
     InitializeComponent(); 
    } 
} 

Błąd Dostaję jest:

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: CultivosWindow --- The base 
class 'TripleH.Erp.Controls.DataForm' could not be loaded. Ensure the assembly has 
been referenced and that all projects have been built.  


Instances of this error (1) 

1. Hide 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 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host) 

Jest to błąd na projektanta ?, Czy robię coś źle? Czy jest jakieś obejście tego?

Dziękujemy za pomoc

Odpowiedz

16

To znane ograniczenie. Zasadniczo można obejść to, deklarując inną klasę, która dziedziczy z klasy ogólnej.

na przykład:

class Generic<T> : UserControl 
{ 
} 

następnie

class GenericInt : Generic<int> { } 

następnie użyć GenericInt zamiast Typowa. SUKOŚCI Wiem.

+0

Dziękuję bardzo, miałeś rację. – albertein

+0

Mogę potwierdzić, że to obejście działa. I działa niezależnie od tego, czy wstawisz klasę pośrednią (np. GenericInt) do złożenia ** A ** lub zespołu ** B **. –

Powiązane problemy