none
Heredar diseño de form padre RRS feed

  • Pregunta

  • Hola buan dia.

    Estoy haciendo una aplicacion en visual studio 2010 en la cual hice mi diseño con una barra de botones y heredar ese form en el resto de los form que agregue para tener el mismo diseño. Para diseñar mi form principal usé los componentes de Dotnetbar y hereda de la clase Office2007Form que es necesaria para el diseño, la cual tambien hereda de Windows.Form. Mi form principal la declar como generica para enviarle mis objetos entidades al form.


    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using DevComponents.DotNetBar;
    
    namespace Analisis
    {
        public partial class MainForm<T> : Office2007Form where T : class
        {
            T currentRecord;

    Y en los form que agrego solo heredo de mi form base

    using Entities.DTO;
    using LogicAccessLayer;
    using Entities;
    using System.Windows.Forms;
    
    namespace Analisis
    {
        public partial class CapturaMedicosWindow : MainForm<Medicos>, ISearchStoredProcedure<Medicos>, IObjectCreator
        {

    Esto en tiempo de ejecucion funciona bien, el detalle viene cuando quiero ver el diseño de mi form hijo, me marca como warning el siguiente mensaje:

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

    Este error no me deja ver el diseño del form para modificar controles, he leido en algunos foros, incluyendo este, que quitando la referencia al form padre, compilando y agregandola de nuevo se les arregla el problema y ya lo intente pero no funciona. Ya hice el intento de hacer la herencia sobre una clase del mismo form y heredar esa clase, pero tampoco me funciona.

     public class CapturaMedicoMainForm : MainForm<Medicos>
        {
            public CapturaMedicoMainForm()
                : base()
            {
            }
        }

    using Entities.DTO;
    using LogicAccessLayer;
    using Entities;
    using System.Windows.Forms;
    
    namespace Analisis
    {
        public partial class CapturaMedicosWindow : CapturaMedicoMainForm, ISearchStoredProcedure<Medicos>, IObjectCreator
        {

    Cabe mencionar que este proyecto usa linq to sql y decidi cambiarlo en capas y ya tenia un form padre con controles basicos de visual studio y tambien es generico y con este si puedo ver el diseño de los hijos, ya compare que puede tener diferente uno de otro y no le veo diferencia, excepto que mi primero form hereda directamente de Windows.Form y el nuevo hereda de los controles de Dotnetbar.

    ¿Alguna idea del error?.

    Saludos

    lunes, 4 de febrero de 2013 19:01

Todas las respuestas

  • El problema es que MainForm es una plantilla (template).  Las plantillas no pueden ser mostradas en el diseñador de Visual Studio.  Si MainForm no fuera una plantilla entonces no tendría problema.

    Jose R. MCP
    Code Samples

    lunes, 4 de febrero de 2013 19:10
    Moderador
  • Hola.

    ¿a que te refieres con que si no fuera plantilla no habría problema, a que los form heredan de el?, porque si ese es el caso, tengo otro form que tambien es plantilla, y es la plantilla actual, y si se ven en diseño los hijos, lo que estoy haciendo es cambiando el padre por el form nuevo.

    Saludos

    lunes, 4 de febrero de 2013 19:49
  • Esto es una plantilla (template):  public class MiClase<T>.  Esto no es una plantilla:  public class MiClase.  Me parece que es porque uso "template" que es de C++.  En C# me parece que se llaman genéricos.  Tal vez por eso la confusión.


    Jose R. MCP
    Code Samples

    lunes, 4 de febrero de 2013 19:58
    Moderador
  • Bueno, despues de estar moviendole un poco, no sé en que punto fue que ya puedo ver el diseño de la pantalla hija ni tampoco cual fue la solución ^.^, pero sí es posible ver el diseño a pesar de ser plantilla, template o genérico.

    Saludos

    lunes, 4 de febrero de 2013 20:27
  • ¿De verdad?  Lo encuentro curioso pues me parece haber tratado hace unos años con VS2005 y no hubo Dios posible.  Tal vez debería probar nuevamente en VS2012.

    Jose R. MCP
    Code Samples

    lunes, 4 de febrero de 2013 20:36
    Moderador