Cambio de propiedades de fuente en VB.NET

La negrita es "solo lectura" en VB.NET. Este artículo te dice cómo cambiar eso.

En VB6, era muy fácil cambiar una fuente a negrita. Simplemente codificaste algo como Label1.FontBold, pero en VB.NET, la propiedad Bold del objeto Font para una etiqueta es de solo lectura. Entonces, ¿cómo lo cambias??

Cambiar las propiedades de fuente en VB.NET con formularios Windows Forms

Aquí está el patrón de código básico para Windows Forms.

Private Sub BoldCheckbox_CheckedChanged (_
Remitente ByVal como System.Object, _
ByVal e As System.EventArgs) _
Maneja BoldCheckbox.CheckedChanged
Si BoldCheckbox.CheckState = CheckState.Checked entonces
TextToBeBold.Font = _
Nueva fuente (TextToBeBold.Font, FontStyle.Bold)
Más
TextToBeBold.Font = _
Nueva fuente (TextToBeBold.Font, FontStyle.Regular)
Terminara si
End Sub

Hay mucho más que Label1.FontBold, eso es seguro. En .NET, las fuentes son inmutables. Eso significa que una vez que se crean no se pueden actualizar.

VB.NET te da más control del que obtienes con VB6 sobre lo que está haciendo tu programa, pero el costo es que debes escribir el código para obtener ese control. VB6 eliminará internamente un recurso de fuente GDI y creará uno nuevo. Con VB.NET, debes hacerlo tú mismo.

Puede hacer que las cosas sean un poco más globales agregando una declaración global en la parte superior de su formulario:

Private fBold como nueva fuente ("Arial", FontStyle.Bold)
Private fNormal As New Font ("Arial", FontStyle.Regular)

Entonces puedes codificar:

TextToBeBold.Font = fBold

Tenga en cuenta que la declaración global ahora especifica la familia de fuentes, Arial, en lugar de simplemente usar la familia de fuentes existente de un control específico.

Usando WPF

¿Qué hay de WPF? WPF es un subsistema gráfico que puede usar con .NET Framework para crear aplicaciones donde la interfaz de usuario se basa en un lenguaje XML llamado XAML y el código es independiente del diseño y se basa en un lenguaje .NET como Visual Basic. En WPF, Microsoft cambió el proceso una vez más. Así es como haces lo mismo en WPF.

Private Sub BoldCheckbox_Checked (_
Remitente ByVal como System.Object, _
ByVal e As System.Windows.RoutedEventArgs) _
Maneja BoldCheckbox.Checked
Si BoldCheckbox.IsChecked = True entonces
TextToBeBold.FontWeight = FontWeights.Bold
Más
TextToBeBold.FontWeight = FontWeights.Normal
Terminara si
End Sub

Los cambios son:

  • El evento CheckBox es Checked en lugar de CheckedChanged
  • La propiedad CheckBox es IsChecked en lugar de CheckState
  • El valor de la propiedad es Boolean True / False en lugar de Enum CheckState. (Windows Forms ofrece una propiedad Verificado verdadero / falso además de CheckState, pero WPF no tiene ambas).
  • FontWeight es una propiedad de dependencia de la etiqueta en lugar de que FontStyle sea propiedad del objeto Font.
  • FontWeights es una clase no heredable y Bold es un valor estático en esa clase

¡¡Uf!! ¿Crees que Microsoft realmente trató de hacerlo más confuso??