Pregunta

Me gustaría usar Segoe UI 9 pt en Vista y Tahoma 8 pt en Windows XP/etc.(En realidad, me conformaría con Segoe UI en ambos, pero mis usuarios probablemente no lo tengan instalado). Pero, al ser bastante diferentes, realmente arruinan el diseño de mis formularios.Entonces...¿Existe una buena manera de lidiar con esto?

Un ejemplo:tengo un Label, con un espacio en blanco en el medio, en el que coloco un NumericUpDown control.Si uso Segoe UI, el NumericUpDown está aproximadamente a 5 píxeles a la izquierda del espacio en blanco, en comparación con cuando uso Tahoma.Esto es un dolor;No estoy seguro de qué hacer aquí.

Más específicamente, mi pregunta sería:¿Cómo puedo colocar controles en medio de un espacio en blanco en mi Labels (o CheckBoxetc.)?Lo más general:¿Existe una buena manera de manejar diferentes fuentes en Windows Forms?

Editar:No creo que la gente entendiera la pregunta.yo se como variar mis fuentes basado en el sistema operativo.simplemente no sé cómo lidiar con los problemas de diseño que surgen al hacerlo.

Responder a ajryan, secado rápido:Bien, ustedes entienden la pregunta.Supongo que MeasureString podría funcionar, aunque me interesaría seguir explorando mejores formas de resolver este problema.

El problema de dividir el control es más evidente, por ejemplo, con una CheckBox.Allí, si el usuario hace clic en la "segunda mitad" del CheckBox (que sería un separado Label control, supongo), el CheckBox no cambia de estado.

¿Fue útil?

Solución

Es extraño tener que diseñar un control dentro de otro.Es posible que esté resolviendo mal un problema ascendente.¿Puede dividir la etiqueta en dos etiquetas con la parte superior hacia abajo entre ellas y tal vez confiar en un panel TableLayout de Windows Forms?

Si es esencial intentar posicionar según el tamaño de fuente, puedes usar Gráficos.MeasureString("Cadena antes de arriba abajo", myLabel.Font)

Si lo que busca es el posicionamiento del control dependiente de la fuente, probablemente debería cambiar el título de la pregunta.


[editar] Puede manejar el evento de clic de la parte "segunda mitad" de la etiqueta y cambiar el estado de la casilla de verificación en ese evento.Sin embargo, todo parece un truco.¿Cuál es el problema que resuelve este extraño diseño de control?¿Por qué necesitas un arriba y abajo en medio de una etiqueta?

Otros consejos

Apoyo el uso de TableLayoutPanel para controles en línea de una sola línea.

Por lo general, configuro cada columna y la primera fila en Tamaño automático y configuro la propiedad Dock de cada control secundario en Rellenar el diseñador.Eso hace que el diseño horizontal se muestre correctamente.Para hacer que el texto se alinee entre etiquetas/cuadros de texto, establezca la propiedad TextAlign en MiddleLeft.

Si su texto pasa a la siguiente línea, no hay una solución fácil.Usar Graphics.MeasureString/TextRenderer.MeasureText y alguna lógica de ajuste elegante es tu mejor opción :(

En primer lugar, puede averiguar qué versión de Windows está utilizando con el Sistema operativo.Plataforma propiedad en la biblioteca del sistema.

En segundo lugar, es posible que coloque la configuración de fuente en archivos de recursos y determine qué archivo de recursos usar dependiendo de ciertas condiciones (por ejemplo, la versión de su sistema operativo).

Personalmente, creo que sería bueno dejar que el usuario determine las fuentes que ellos prefiere en lugar de la fuente que desea que utilicen.

Finalmente, tal vez quieras echar un vistazo a WPF ya que este es uno de los espacios problemáticos que fue diseñado para resolver.

¿El problema es resolver la ubicación de los controles?es decir.¿Sabes que las fuentes X e Y funcionan en los sistemas operativos A y B y brindan el diseño que deseas con el texto que estás usando en esos sistemas?

El método MeasureString podría ayudar a elaborar su diseño de una manera que no esté atado a fuentes específicas.

float textWidth = gráficos.MeasureString(someString, someFont).Width;

(¿Funcionaría un cambio en la alineación del texto?Puede que yo también esté entendiendo mal el problema)

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