visual tipo para net letra fuente como codigo cambiar .net winforms user-interface fonts appearance

.net - tipo - Fuente predeterminada para la aplicación Windows Forms



codigo para cambiar el tipo de letra en visual basic (8)

Cada vez que creo un formulario nuevo en mi aplicación, utiliza la fuente "Microsoft Sans Serif, 8.25pt" de forma predeterminada. No lo voy a cambiar porque sé que en este caso mi formulario debe elegir la fuente predeterminada para el sistema. Sin embargo, cuando ejecuto mi aplicación, la fuente que se utiliza sigue siendo cualquier cosa menos la IU de Segoe (mi fuente de sistema predeterminada en mi sistema operativo Windows Vista).

¿Por qué pasó esto? ¿Cómo me aseguro de que mi aplicación se parece a una aplicación normal de Windows?


Echa un vistazo a esta entrada de blog que habla sobre la fuente predeterminada en Formularios que conduce al problema que estás experimentando y este Error de conexión con la respuesta de Microsoft. En resumen, parece que Forms no obtiene la fuente de Windows predeterminada (correcta) (que ha cambiado).


El Control.DefaultFont es ReadOnly; un hacky debía sobrescribirlo es usar la reflexión.

Type settingsType = typeof(Control); var defaultFontField = settingsType.GetField("defaultFont", BindingFlags.Static | BindingFlags.NonPublic); defaultFontField.SetValue(null, new Font("Segoe UI", 8.25F));

Asegúrese de tener un UT vigilando este código, no existe un contrato de API que lo proteja si cambia la implementación del Marco.

También tenga en cuenta el diseñador de formularios que la mayoría de las veces insertará la fuente textualmente en clases .designer.


Establecer la propiedad Font del formulario en SystemFonts.DialogFont no funciona si tiene cuadros de grupo con controles asociados. Los controles dentro del cuadro de grupo no se ven afectados por la propiedad Fuente del formulario. Lo "solucioné" estableciendo la propiedad Font en SystemFonts.DialogFont para cada cuadro de grupo.


Intente esto, haga clic en un formulario y cambie el tamaño de la fuente; por ejemplo, cambié el tamaño de fuente de Formulario a 12pt y luego comprobé arrastrando el cuadro de texto al formulario. Verás, el tamaño del cuadro de texto también se cambia a 12pt. Acabo de obtener esta solución por accidente.


La respuesta aceptada realmente no responde la pregunta; simplemente explica por qué está ocurriendo este comportamiento.

Algunas de las otras respuestas proponen soluciones provisionales sólidas, pero he descubierto que la mejor solución es crear una forma base de la que hereden todos los formularios de su aplicación y establecer la propiedad Font de este formulario base en SystemFonts.MessageBoxFont en el constructor. Esto no solo garantiza que su aplicación obtenga la fuente correcta en tiempo de ejecución, en función del entorno del usuario (evitando el posible problema planteado por Hans Passant; un XP sin Office 2007 recurrirá a Microsoft Sans Serif en ausencia de Segoe UI). ), pero también le ofrece soporte en tiempo de diseño para su fuente actual de Windows. Usar la fuente correcta en el momento del diseño resuelve el problema que señala Josuegomes, porque cualquier control de contenedor que se cree en el formulario recogerá la fuente utilizada por el formulario en el momento del diseño.

Además de las ventajas anteriores, esto le libera de tener que acordarse de modificar el constructor para cada formulario que crea y garantiza la coherencia en todos los formularios de su aplicación, además de darle un lugar donde colocar otras funcionalidades comunes. Utilizo esto de varias maneras diferentes, como p / invocación, etc. para corregir errores en la implementación de WinForms.

El único problema que queda con este enfoque es si desea establecer un estilo de fuente para un control en particular, como en negrita. El mejor lugar para hacer esto sigue siendo en el constructor de ese formulario, comenzando con la fuente del formulario como base y modificando el estilo desde él:

myControl.Font = New Font(Me.Font, FontStyle.Bold)


Los controles dentro del cuadro de grupo de hecho no se ven afectados por la propiedad Fuente del formulario. La razón es que los controles en los controles de contenedor se tratan como elementos secundarios de los controles de contenedor como groupbox, pero no como elementos secundarios del formulario principal. Para que todos los controles, incluidos los de las cajas de grupo, se escalen correctamente, puede usar un código similar al siguiente:

foreach (Control ctr in this.Controls) { ctr.Font = SystemFonts.IconTitleFont; // controls in groupboxes are not child of main form if (ctr.HasChildren) { foreach (Control childControl in ctr.Controls) { childControl.Font = SystemFonts.IconTitleFont; } } }


Puede agregar antes de InitializeComponent () en el (los) constructor (es) de Forma (s):

this.Font = SystemFonts.MessageBoxFont;

Esto parece funcionar con Windows XP y Windows Vista.


Sí, usa la fuente devuelta por GetStockObject(DEFAULT_GUI_FONT) . Que es MS Sans Serif. Una fuente antigua, desaparecida desde la mayoría de las máquinas. El mapeador de fuentes lo traduce, no sorprende, a Microsoft Sans Serif.

No hay ningún procedimiento documentado que conozca para cambiar esa fuente predeterminada, los documentos del SDK mencionan MS Sans Serif explícitamente. Si quieres Segoe, tendrás que pedirlo. Lo cual no es tan seguro de hacer, todavía hay muchas máquinas XP sin Office 2007. El mapeador de fuentes lo traducirá en una máquina que no tiene Segoe disponible. No estoy seguro de qué aparece, ya no me queda esa máquina.