2012-04-03 12 views
22

Estoy intentando hacer una aplicación de página múltiple usando winforms. Decidí usar varios paneles: cada panel representa una página diferente, así que puedo cambiar entre ellos cuando necesito mostrar contenido diferente.Winforms: cómo mostrar/ocultar elementos en el diseñador

Mi problema es sobre el apilamiento de paneles en la vista del diseñador. Cuando tengo más de 2 paneles de pantalla completa, todos se apilan entre sí y no puedo ver el que creé antes. Hay alguna solución para esto ? Cambiar la visibilidad no afecta la vista de los diseñadores. Piense en ello como una opción similar a Photoshop para mostrar/ocultar capas. Estoy usando Visual C# 2010 Express.

Gracias de antemano, Kamil

+0

Si desea seleccionar el otro 'Panel', puede simplemente seleccionarlo del menú desplegable. Otra solución sería hacerlos más pequeños o moverlos a alguna parte y ajustar programáticamente su tamaño y ubicación según sea necesario o considerar usar el control 'TabControl'. –

Respuesta

22

Hay varias opciones aquí:

  1. utilizar la vista Document Outline (View --> Other Windows --> Document Outline) para seleccionar el panel que le interesan. Puede hacer clic derecho sobre él y elegir Bring to Front para ponerlo en frente de todo lo demás.
  2. Aunque probablemente no sea relevante para lo que está haciendo, puede considerar usar un TabControl, con el que puede jugar visualmente en el momento del diseño. Esta es solo una solución razonable si desea que sus usuarios puedan cambiar manualmente qué panel están viendo.
  3. Considere mover sus paneles en clases personalizadas UserControl y trabaje en ellas por separado. Si el contenido y la lógica de estos paneles son razonablemente autónomos, puede que desee hacerlo de todos modos para reestructurar mejor su código.

Adición: También puede utilizar un truco que hace un TabControl 's pestañas invisibles para el usuario. Ponga un TabControl en su formulario, y en el tiempo de ejecución establezca la altura ItemSize en 1. Esto hace que (casi) imposible para el usuario cambiar las pestañas por su cuenta, pero aún le permite cambiar la pestaña visible en el diseñador.

myTabControl.ItemSize = new Size(myTabControl.ItemSize.Width, 1); 

Tenga en cuenta que llamé a esto un hackear por una razón: TabControl s no estaban destinados a ser utilizados de esta manera. Es algo que parece funcionar, pero como todos los ataques, puede romperse en cualquier momento, por lo que solo debes hacerlo como último recurso (y no me culpes si te causa dolores de cabeza más adelante ...). En resumen, I no recomiendo este truco, solo lo ofrezco como una posibilidad.

+0

Decidí usar la opción traer al frente/enviar de vuelta porque esta es la solución más fácil por ahora y no implica cambiar la estructura de mis aplicaciones (control de pestañas). Desafortunadamente, no pude encontrar el esquema del documento Vista-> otras ventanas->, así que tengo que usar enviar para volver a todos los paneles hasta que llegue al que estoy buscando. –

0

Un enfoque que he utilizado en esta situación es el uso de la ventana de documento Explorer para llevar el panel estoy trabajando en la parte delantera.

0

No estoy seguro de la forma correcta de hacerlo, pero lo que hago yo en estos casos es que los controles jyst make son muy pequeños y más adelante en la ejecución del programa cambio sus tamaños y ubicaciones al inicio.

4

Utilizo "Traer al frente" o "Enviar para volver" en Formato> Ordenar para gestionar este tipo de escenario, pero tiene razón, es una mierda que la visibilidad sea solo en tiempo de ejecución (AFAIK).

Saludos

0

Si es aceptable para usted, considere el uso de un control TabControl y poner cada uno de los controles Panel en una pestaña diferente. Luego puede ocultar y mostrar la página correcta al cambiar entre pestañas o eliminar y agregar de manera programática la pestaña correspondiente al control.

También puede considerar usar dos ventanas diferentes con diseños diferentes y mostrar el cambio entre ellas.

Si usa más que unos pocos paneles, puede considerar poner cada uno de ellos en un control separado y luego simplemente usar los controles dentro del formulario de la aplicación (es decir, agréguelos programáticamente cuando sea necesario). De esta forma, puede diseñar cada uno de los controles (por lo tanto, cada uno de los contenidos de Panel) por separado, sin que haya otros Panel visibles.

Cada una de esas sugerencias haría que algunas piezas de UI estén más separadas, lo que puede desearse si cada uno de los diseños que tiene está asociado con una parte separada de la aplicación. Usar esas sugerencias también puede hacer que sea mucho más fácil usar el deisgner para administrar.

0

Entonces, ¿desea poder mostrar/ocultar su panel en la Vista de VS Designer (no solo cuando se está ejecutando el ejecutable real) correcto?

¿Algo como this ayuda?

Si no es así, quizás intente crear controles de usuario personalizados en lugar de paneles que le permitan establecer las propiedades de visibilidad que desee o podría recurrir al uso de WPF que proporciona este tipo de funcionalidad. Haga clic en here para obtener más información.

Cuestiones relacionadas