Pregunta

Tenemos una aplicación que tiene que ser flexible en la forma en que se muestra el formulario principal para el usuario, dependiendo del tipo de usuario, el formulario debe ser ligeramente diferente, tal vez un botón extra aquí o allí, o algún otro matiz.Con el fin de dejar de escribir código de forma explícita quitar o agregar controles, etc, me volví a visual herencia para resolver el problema - en lo que yo pensaba que era un puro, limpio y lógica de estilo OO - resulta que la mitad del tiempo las formas hereditarias tienen un tiempo difícil de representación themeselves en el VS por ninguna buena razón ... - y me da la sensación de que los desarrolladores y, en cierta medida, Microsoft ha rechazado la práctica de la Visual de la Herencia - ¿puede confirmar esto, que me estoy perdiendo algo aquí?

Saludos.

¿Fue útil?

Solución

Pensé que había más o menos ordenado el escritorio problemas con el diseñador en el año 2005.Has probado a los culpables de costumbre?

  • No hay resumen de tipos de control
  • No hay argumentos de constructor en cualquier forma
  • La inicialización se trasladó a Form_Load como contraposición a la cto r
  • No hay controles en el mismo proyecto como el control de usuario/formulario que se ponen en el interior de
  • Cierre todos los documentos -> Limpieza> Rebuild
  • Reinicie VS

Me parecía pensar que el tiempo que usted hizo todo lo anterior ha funcionado.....en su mayoría.

Otros consejos

Estoy estudiando hacia el (es cierto que pronto-a-ser-obsoleto) MCAD, y parte de la WinForms elemento Visual Inheritence

Yo, personalmente, he tenido grandes problemas con él, sin embargo, no son consideraciones a tener en cuenta.

Para mí, el principal problema que siempre ha de inicialización..Es necesario recordar que el diseñador no puede/no crear instancias de formularios en la misma forma que lo hace en tiempo de ejecución (de la misma, no se puede hacer esto con la web dev, que es por qué es necesario tener cuidado con el control personalizado de la representación).

También, una vez que la forma ha cambiado, una completa re-construcción del proyecto se requiere con el fin de propagar los cambios a los formularios hijos que heredan de él.

Yo personalmente he visto ninguna evidencia para sugerir que ha sido "rechazados". AFAIK, sigue siendo una buena práctica para el ejercicio de reutilización de código donde sea posible.Visual herencia que proporciona.

Sugiero la creación de una nueva pregunta con la real los problemas que están teniendo, con el código de ejemplo?Podemos entonces mira a ver si la podemos obtener de trabajo y explique por qué :)

He visto algunos problemas en VS2005 con esto.Eran en su mayoría debido a los problemas con la construcción de las formas-objetos en el diseñador.Hubo problemas con el código que intentó acceder a la base de datos desde el formulario, constructores, etc.

Puede depurar problemas como este por iniciar una segunda instancia de visual studio y la carga de la primera instancia en el depurador.Si usted establecer puntos de interrupción en el código puede depurar lo que sucede en los diseñadores en la primera instancia.

Otro problema que yo recuerde, fue la de los genéricos en el formulario de clases

public class MyForm<MyObject> : Form

esto no va a funcionar

A menudo me toparse con este tipo de problemas en Visual Studio.En muchos casos MSVS diseñador de formularios no se reproduce de forma correcta el formulario.De vuelta en los días en los que he trabajado con WinForms yo tenía que hacer todo tipo de extraños trucos para habilitar algunos escenarios complejos.Sin embargo, yo creo que el uso de visual herencia es muy beneficioso y no deben ser arrojadas a la basura, independientemente de MSVS diseñador de errores.

Creo que he encontrado una manera de cómo evitar este problema.

No enlazar el Evento Form_Load en su formulario principal, esto va a romper el diseñador.

También no tomar el valor Predeterminado constructor vacío lejos de Visual Studio en el Formulario principal.Si usted quiere tener la Inyección de Dependencia, crear otro constructor.

Como este:

public ProductDetail()
{
    InitializeComponent();
}

public ProductDetail(ISupplierController supplierController) : base()
{
    InitializeComponent();
    this.supplierController = supplierController;
}

Usted puede entonces todavía hacerlo desde el Formulario heredado:

public NewProduct(ISupplierController supplierController)
    : base(supplierController)
{
    InitializeComponent();
}

Esto funcionó para mí hasta ahora, y tenía algo raro diseñador de temas.

saludos, Daniel

Leer esto: http://cs.rthand.com/blogs/blog_with_righthand/archive/2005/11/10/186.aspx

AFAIK, todavía hay problemas con Visual Herencia y los objetos que dependen de las colecciones para el diseño de elementos, por lo general de la cuadrícula de los controles, etc.Yo creo que MS todavía han eliminado la posibilidad de cambio de f.ex.un GridView en una forma hereditaria/usercontrol etc.Pero otros controles como el cuadro de texto, la Forma, el control de usuario, Panel, etc.debería funcionar como se esperaba.

He tenido hasta ahora ningún problema con que la VI utilizar la 3ª parte de controles de cuadrícula de mí, pero usted tiene que tener cuidado, en particular, la eliminación de elementos de las colecciones DEBEN ser evitados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top