El fondo¿Cómo evitar Windows Forms de radio contenedor botón agrupación automática
En .NET Windows Forms (2.0) botones de radio se agrupan automáticamente por el control contenedor, si se trata de un formulario, panel o GroupBox.
Eso significa que cuando selecciona un botón de opción, todos los demás botones de opción en el mismo contenedor cambian automáticamente a estado no verificado.
Ahora, consideremos el siguiente diseño del formulario:
MUST HAVE NICE TO HAVE DESCRIPTION
--------- ------------ -----------------------------------------------
[ ] [ ] The gizmo works
[ ] [ ] The gizmo works beautifully
[ ] [ ] The gizmo works amazingly and makes you breakfast
[ ] [ ] The gizmo comes with a pony
- Cada
'[ ]'
es un botón de radio. Se le pide - El usuario elegir el requerido respuesta en la columna uno, y el opcional (deseada, el mejor de los casos la respuesta) en la columna 2.
Como se puede ver, los botones de radio debe agruparse por columna: la selección de una de las radios debería borrar el resto de la columna, pero no debería tener ningún efecto en la otra columna.
El problema
Básicamente, el problema es que esta es una forma generado dinámicamente.
- El número de filas en el diseño es dinámico y se carga desde una definición de formulario configurable.
- El texto de la descripción no se conoce hasta que el tiempo de ejecución y la longitud varíen mucho (algunos pueden tener solo un par de palabras y algunas otras una docena de líneas).
- El diseño no se puede rediseñar. Esto proviene de la familiaridad de los usuarios (no técnicos) con la versión en papel de este formulario que ha estado en uso durante años. Este formulario también se imprimirá e incluso si modifiqué el sistema de entrada en mi formulario, eso significaría codificar otra versión para imprimir con el diseño 'antiguo'.
Lo que he intentado y no funcionó
primera vez que trató de implementar esto como un diseño generado dinámicamente usando tres paneles, uno para cada columna, por lo que la agrupación automática botón de opción funcionaría igual multa. Y lo hizo.
Pero los problemas de diseño relacionados con la alineación horizontal entre los botones de radio y su texto me están acabando. El tamaño del texto no se conoce hasta el tiempo de ejecución y las líneas de texto se pueden ajustar (a veces varias veces para cada elemento). A veces se alinea correctamente, otras veces no. Estoy a punto de comenzar a depurar esto, pero estoy pensando si tal vez cambiar esta implementación de tres paneles es una mejor opción.
Lo que estoy tratando de hacer
me gustaría rediseñar el diseño mediante el uso de un TableLayoutPanel
con tres columnas con el fin de simplificar las cuestiones relacionadas con la alineación, pero eso significa que no puedo usar la radio automática botón agrupar por contenedor "característica".
EDIT:
Como sugirió Gerrie, otra opción de diseño es que cada línea implementado como un control de usuario y el uso de un panel de diseño de flujo.
Eso significa, una vez más, que podría querer usar controles para el diseño, pero no para agrupar botones de opción.
que iba a necesitar para conseguir grupos de botones de radio verticales a pesar de utilizar el usuario controla horizontal
/EDIT
Lo que estoy tratando de pedir
necesito consejos y sugerencias sobre cómo para controlar manualmente la agrupación de los botones de radio. Realmente no me importa subclasificar la clase RadioButton
si es necesario.
Específicamente, ¿hay alguna forma 'canónica' o conocida de subclasificar 'RadioButton' o bajar hasta las API de Win32, de modo que cada vez que se compruebe el control (usando el mouse, teclado Entrar, barra espaciadora, y de cualquier otra forma que yo no pueda saber si los selecciono) Puedo atrapar el evento y actualizar manualmente el estado de cada uno de los otros controles en mi formulario y de manera que la función de agrupación automática es conocida como 'desactivada' ? Me temo que la implementación también está relacionada con los contenedores, y ¿podría ser forzado a subclasificar el Panel ?.
¿Cómo funciona la agrupación 'magia' en Windows Forms?
Cada solución que he encontrado en Google que implementa grupos personalizados de botones de radio o 'listas de botones de radio' se basa de alguna manera en el uso de un contenedor para el grupo. ¿Se pueden evitar los contenedores? ¿Si es así, cómo?.
Si va con esta solución, sería un buen momento para crear un botón de radio propio que no tenga que estar en un panel. Y cuando lo haga, agregue una propiedad opcional GroupID, que se reenvía cuando se alterna. – Stefan
Nuevamente, gracias por su ayuda Stefan. Por cierto, ya había hecho una clase IndependentRadioButton pero aún no se me había ocurrido agregar la propiedad GroupId allí mismo. Suena bien. –
Verifique la edición de mi respuesta para obtener más ideas. –