2008-09-04 23 views
8

Utilizando C# 2.0, ¿cuál es la mejor forma de implementar controles dinámicos de formularios?Dynamic Form Controls

Necesito proporcionar un conjunto de controles por objeto de datos, entonces ¿debería simplemente hacerlo manualmente y disponerlos mientras incremento el valor superior o hay una forma mejor?

Respuesta

8

Puede utilizar paneles con diseño automático como FlowLayoutPanel y TableLayoutPanel.

Lamentablemente, solo hay 2 paneles con diseño automático, pero puede crear un panel de diseño personalizado.

Yo recomendaría que lea los artículos siguientes:

How to: Create a Resizable Windows Form for Data Entry

Walkthrough: Creating a Resizable Windows Form for Data Entry

Otra opción sería el uso de WPF (Windows Presentation Presentación).
WPF es la combinación perfecta para su tarea.
Los controles de WPF se pueden alojar en aplicaciones de WinForms, por lo que no tiene que cambiar por completo.

1

¿Qué quiere decir con "dinámico"? ¿Un nuevo conjunto fijo de controles para cada fila de datos en el conjunto de datos? Luego use un UserControl que contiene sus controles.

¿O quiere decir que, dependiendo de su diseño de datos, desea proporcionar al usuario un conjunto de controles personalizados, por ejemplo, uno TextBox para cada columna?

1

Sí, he encontrado que los controles de diseño manual (incrementando su propiedad superior por el alto del control más un margen sobre la marcha) son razonablemente efectivos.

Otro enfoque es colocar los controles en paneles con el conjunto de puertos en la parte superior, de modo que cada panel sucesivo se acople con el panel superior. Luego puede alternar la visibilidad de los paneles individuales y los controles de abajo se ajustarán para llenar el espacio disponible. Tenga en cuenta que esto puede ser un poco impredecible: mostrar un panel oculto que está acoplado a veces puede cambiar su posición relativa a otros controles acoplados.

1

Bueno, así es como lo estamos haciendo ahora en un proyecto. pero eso solo es útil para casos simples. Sugiero que uses algún tipo de plantilla para casos más complejos.

Por ejemplo, utilicé Reflection para asignar un cierto tipo de control a una determinada propiedad en los objetos de mi dominio en un proyecto anterior.

Puede intentar generar el código de plantillas usando t4, vea T4 Templates in Visual Studio for Code Generation Screencast para un ejemplo simple. Puede aplicar esto a WinForms.

También DevExperience tiene un marco agradable (costoso), consulte DevExpress eXpressApp Framework™.

2

@Sam Sé que esta pregunta era sobre Windows Forms, pero definitivamente debería comenzar a buscar en WPF. Este tipo de escenario es realmente fácil en WPF con DataTemplates y TemplateSelectors.