2011-07-29 12 views
5

estoy tratando de limpiar todos los errores de diseño en nuestras soluciones y corrió en el siguiente error:¿Puede el diseñador de estudio visual mostrar clases heredando tipos genéricos?

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

Las clases, se definen en el mismo conjunto, así que sé que no es un problema de referencia. Me pregunto si tiene algo que ver con el hecho de que la clase base es genérica. ¿Algunas ideas?

public class DoubleAttributeTextBoxBase : NumericAttributeTextBoxBase<double> 

public class NumericAttributeTextBoxBase<T> : TextBox where T : IComparable, IComparable<T> 
+0

Sé que esto puede parecer una tontería, pero ¿ha revisado para asegurarse de que están en el mismo espacio de nombres? ¿La aplicación compila? –

Respuesta

9

La clase base para una clase siendo diseñado debe ser no abstracta y no genérico. Para hacer una clase que hereda de una clase genérica designable. La solución consiste en insertar una clase no genérica trivial en el medio:

public partial class DoubleAttributeTextBoxBase 
    : NumericAttributeTextBoxBaseOfDouble 
{ 
    public DoubleAttributeTextBoxBase() 
    { 
     InitializeComponent(); 
    } 

    // Now DoubleAttributeTextBoxBase is designable. 
} 

public class NumericAttributeTextBoxBaseOfDouble 
    : NumericAttributeTextBoxBase<double> 
{ 
} 

Para hacer esto tan simple como sea posible, incluso se puede poner la clase no genérica en el mismo archivo que la clase que desea diseñar . Solo asegúrese de ponerlo después de la clase (como he hecho anteriormente) porque el diseñador espera que la primera clase en el archivo sea la que está siendo diseñada.

+0

La clase de envoltura funciona a las mil maravillas. Gracias. – bsh152s

+0

La clase base no genérica necesita tener un constructor sin parámetros, no funciona sin él. Necesita reconstrucción después de que se introduce el constructor. –

1

No sé de una solución, esto ha sido una gran limitación de Visual Studio desde que salió C# 2.0. Lo único que puedo decir es agregar ese control a la página en tiempo de ejecución, entonces al menos puede tener a su diseñador de vuelta para todo lo demás.

de MSDN:

Your component or control cannot be a generic type, which is also called a template type or a parameterized type. The design environment does not support generic types.

http://msdn.microsoft.com/en-us/library/ms171843.aspx