2009-08-20 9 views
11

Uso: C#, VS2008C#: división de una clase en varios archivos (con un formulario)

tengo la siguiente clase de forma principal:

[Main.cs]

namespace Server 
{ 
    public partial class PipeServerform : System.Windows.Forms.Form 
    { 
    ... 
    } 
} 

Pero es grande y larga, y contiene código de lógica GUI +.

Así que la clase separada en varios archivos para facilitar la gestión y crear este archivo que sólo contiene los detalles de la lógica:

[DoCommands.cs]

namespace Server 
{ 
    public partial class PipeServerform : System.Windows.Forms.Form 
    { 
    ... 
    } 
} 

esto funciona ... PERO! El archivo 'DoCommands.cs' dentro del proyecto VS2008 ahora tiene una ventana 'forma' en blanco de GUI en blanco asociada.

Tiene sentido, ya que todavía forma parte de la clase de formulario principal, pero asumí que la separación entre archivos diferentes informaría a VS2008 que simplemente es un archivo lógico de comandos simples y no contiene ningún código de formulario GUI .

¿Hay una manera fácil de resolver esta vista? ¿Que el archivo 'DoCommands.cs' no tiene asociado el formulario GUI en blanco?

¿O tengo que literalmente dividirlo en diferentes clases?

Gracias.

Respuesta

7

Si desea que se subordine a sí mismo en PipeServerForm, abra el archivo del proyecto en un editor de texto. Va a encontrar un bloque con este aspecto:

<Compile Include="DoCommands.cs"> 
    <SubType>Form</SubType> 
</Compile> 

Cambio en esto:

<Compile Include="DoCommands.cs"> 
    <DependentUpon>Main.cs</DependentUpon> 
</Compile> 

Ahora, cuando se carga el proyecto, DoCommands.cs debe aparecer bajo Main.cs, al igual que Main.Designer.cs. Noté que VS parece agregar el elemento SubType automáticamente, por lo que DoCommands.cs se abrirá de todos modos en el Diseñador de formularios de forma predeterminada. Quizás también hay una solución simple para eso.

+0

Cuando vuelvo a cargar la solución, VS2008 reinserte el ' El formulario 'devuelve el texto al archivo del proyecto para las líneas' DoCommands.cs ', y el formulario en blanco de GUI aún existe dentro de él. Pero al menos está listado debajo del árbol' mainform.cs 'dentro del archivo del proyecto. Creo que ese es el lo mejor que podemos esperar –

5

Estoy bastante seguro de que no tiene que especificar todas las herencias para una clase parcial. Por lo tanto, si suelta System.Windows.Forms.Form de la lista de herencia para el archivo DoCommands.cs, debería estar dorado.

Editar: Además, dado el tamaño de su formulario principal, es posible que desee considerar la refactorización. Considere seguir un patrón MVC o MVP. Separe sus preocupaciones en clases separadas y posiblemente incluso en módulos.

+0

No. La eliminación de 'System.Windows.Forms.Form' del archivo DoCommands.cs no cambió nada. VS2008 todavía lo marca con un icono de formulario de GUI y lo trata como tal. :( Y aunque estoy de acuerdo en que refactorizar el diseño para usar MVC, et al., Es la mejor manera, por ahora los límites de tiempo impiden un rediseño completo de tales. –

1

Su extensión de formulario parcial no necesita heredar de System.Windows.Forms.Form, al igual que su PipeServerform.designer.cs no lo hereda.

1

Utilicé la herencia en lugar de la implementación parcial para dividir las características de un formulario en varios archivos sin obtener ese formulario de diseñador en blanco al abrir el archivo secundario.

[MainForm.cs]

[System.ComponentModel.DesignerCategory("Form")] 
public partial class MainForm : MainFormFeature 
{ 
... 
} 

[MainForm.Designer.cs]

partial class MainForm 
{ 
... 
} 

[MainForm.Feature.cs]

[System.ComponentModel.DesignerCategory("Code")] 
public class MainFormFeature: Form 
{ 
... 
} 

Luego, como se mencionó anteriormente, edite su archivo de proyecto y agregue lo siguiente para que su archivo de características aparezca junto al Diseñador en su explorador de soluciones.

<Compile Include="MainForm.Feature.cs"> 
    <DependentUpon>MainForm.cs</DependentUpon> 
</Compile> 

Es la única solución que pude encontrar para que funcione bien en Visual Studio sin obtener esa forma de diseñador en blanco. Probablemente también tenga sentido desde el punto de vista del diseño de un objeto.

Cuestiones relacionadas