Cómo crear una vista de árbol de diálogo de preferencias de tipo de interfaz en C#?

StackOverflow https://stackoverflow.com/questions/3725

  •  08-06-2019
  •  | 
  •  

Pregunta

Estoy escribiendo una aplicación que básicamente se trata de un diálogo de preferencias, como en la vista de árbol de diálogo de preferencias de Visual Studio utiliza.El funcionamiento de la aplicación es simplemente un paso a través de los datos de un dispositivo serie a un archivo.Realiza muchas, muchas transformaciones en los datos antes de escribir en el archivo, por lo que la interfaz de usuario de la aplicación es simplemente que todos los ajustes que determinan lo que las transformaciones deben ser.

¿Cuál es la mejor manera de ir sobre el diseño de codificación/una vista de árbol de diálogo preferencias?La manera en la que he estado yendo al respecto es la construcción de la ventana principal con un acoplado control de árbol de la izquierda.Entonces he sido la creación de controles de contenedor que corresponden a cada uno de los nodos del árbol.Cuando un nodo es seleccionado, la aplicación trae ese nodo correspondiente contenedor de control al frente, mueve a la posición correcta, y se maximiza en la ventana principal.Esto parece muy, muy torpe a la hora de diseñarlo.Básicamente significa que tengo toneladas de controles de contenedor más allá del borde de la ventana principal durante el tiempo de diseño que tengo que seguir por el desplazamiento de la ventana principal a fin de trabajar con ellos.No sé si esta totalmente tiene sentido la forma en que estoy escribiendo esto, pero tal vez este visual de lo que estoy hablando tendrán más sentido:

form design

Básicamente tengo que trabajar con este gran forma, con controles de contenedor por todo el lugar, y luego de hacer un montón de tiempo de ejecución de volver a formatear para hacer que todo funcione.Esto parece un mucho de trabajo extra.Estoy haciendo esto de una forma totalmente estúpido manera?Hay algunos "obvio" que la forma más fácil de hacer esto que me estoy perdiendo?

¿Fue útil?

Solución

Un más ordenado forma es crear formularios separados para cada uno de los 'panel' y, en cada constructor del formulario, establezca

this.TopLevel = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Dock = DockStyle.Fill;

De esa manera, cada una de estas formas pueden ser colocados en su propio diseñador, crear instancias de una o más veces en tiempo de ejecución, y se añade a la zona vacía como un control normal.

Quizás la principal forma podría utilizar un SplitContainer con una estática TreeView en un panel, y espacio para añadir estas formas en el otro.Una vez que se añaden, que podría ser volteado a través del uso de Hide/Show o BringToFront/SendToBack métodos.

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show();

Otros consejos

Greg Hurlman escribió:

¿Por qué no acaba de mostrar/ocultar el contenedor apropiado cuando un nodo es seleccionado en la cuadrícula?Tienen los contenedores de todos los tamaños adecuadamente en el mismo lugar, y ocultar todos pero el valor por defecto, que habría de ser preseleccionado en la cuadrícula en la carga.

Por desgracia, eso es lo que estoy tratando de evitar.Estoy buscando una manera fácil de manejar la interfaz durante el tiempo de diseño, con un mínimo de volver a formatear el código necesario para que funcione durante el tiempo de ejecución.

Me gusta Duncan respuesta, porque significa que el diseño de cada uno de los nodos de la interfaz puede ser mantenido completamente separado.Esto significa que no superponerse en el ajuste de las directrices y otros diseños de ventajas.

Probablemente voy a crear varias panel de clases basado en una base de clase hereda CustomControl.Estos controles tendría métodos como el de Guardar/Cargar y cosas por el estilo.Si es así yo puedo diseñar cada uno de estos paneles por separado.

He utilizado un Asistente de control que en el modo de diseño, se manejan varias páginas, de modo que uno podría haga clic en siguiente en el diseñador y el diseño de todas las páginas a la vez a través del diseñador.A pesar de que este tenía varias desventajas cuando se conecta el código de los controles, probablemente significa que usted podría tener una configuración similar mediante la construcción de algunos diseñador de clases.Nunca he yo por escrito de cualquier diseñador de clases en el VS, así que no puedo decir cómo o si vale la pena :-)

Estoy un poco de curiosidad de cómo va a manejar la carga/guardar los valores de a/desde los controles?Debe haber un montón de código en una clase, si todas sus páginas están en una gran Forma?

Y, sin embargo, otra forma sería, por supuesto, para generar la interfaz gráfica de usuario código de cada página es solicitada, a través de información acerca de qué tipo de configuración.

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