2011-12-23 2 views
1

Je n'arrive pas à ajuster le style de police dans un RichTextBox et j'ai vu quelques approches différentes qui parlent d'attributs simples (comme activer ou désactiver le gras) ... mais j'essaie de faire en sorte que ma classe de police puisse ajuster n'importe quel attribut (gras, italique, souligné).Ajustement du style de police pour un RichTextBox dans vb.net

Je me rends compte que Font.Style est un ensemble de drapeaux booléens (un bitfield?) ... mais je ne sais pas comment gérer les attributs en même temps.

Voici le code gênant:

Public Sub ModifyFontStyle(Optional ByVal Plain As Object = Nothing, Optional ByVal Bold As Object = Nothing, _ 
          Optional ByVal Italics As Object = Nothing, Optional ByVal Underlined As Object = Nothing) 
    Dim newFontStyle As System.Drawing.FontStyle 


    If Plain Then 
     newFontStyle = Drawing.FontStyle.Regular 
     GivenFont = New Drawing.Font(GivenFont.FontFamily, GivenFont.Size, newFontStyle) 
     Exit Sub 
    End If 

    If Bold IsNot Nothing Then 
     If Bold Then 
      newFontStyle = GivenFont.Style + Drawing.FontStyle.Bold 
     Else 
      newFontStyle = GivenFont.Style - Drawing.FontStyle.Bold 
     End If 
    End If 


    If Italics IsNot Nothing Then 
     If Italics Then 
      newFontStyle = GivenFont.Style + Drawing.FontStyle.Italic 
     Else 
      newFontStyle = GivenFont.Style - Drawing.FontStyle.Italic 
     End If 
    End If 

    If Underlined IsNot Nothing Then 
     If Underlined Then 
      newFontStyle = GivenFont.Style + Drawing.FontStyle.Underline 
     Else 
      newFontStyle = GivenFont.Style - Drawing.FontStyle.Underline 
     End If 
    End If 

    GivenFont = New Drawing.Font(GivenFont.FontFamily, GivenFont.Size, newFontStyle) 

End Sub 

Et voici le problème éventuel avec ce code:

  • I basculer gras (true) - le texte va gras.
  • Je bascule souligné - le texte est maintenant en gras et souligné.
  • Je bascule en italique - le texte est maintenant en gras, souligné et en italique.
  • Je bascule de nouveau en gras (à false) - le texte est maintenant barré.

Qu'est-ce qui arrive à la police? Le texte doit être souligné et en italique non barré ...

Est-ce une erreur de logique ou un simple malentendu de ma part?

Eh bien, je vous remercie de votre temps, je vais continuer à bricoler avec elle jusqu'à ce qu'il fonctionne ou je reçois une réponse qui fonctionne,

+0

J'ai compris ce que je devais faire: vérifier l'attribut spécifique que j'ajuste et l'empêcher d'être ajouté au style de police plus d'une fois. Je posterai la réponse à cette question dans un petit moment. – Dominick

+0

Signe est supprimé, S'il vous plaît consulter la FAQ. –

Répondre

1

Vous utilisez les opérateurs mauvais. Ils sont en effet similaires aux drapeaux bit, l'enum a l'attribut [Flags]. Vous devrez utiliser l'opérateur Or pour activer un style et l'opérateur Et pour désactiver un style. Comme ceci:

Dim style = Me.Font.Style 
    '--- turn bold on 
    style = style Or FontStyle.Bold 
    '--- turn bold off 
    style = style And Not FontStyle.Bold 
-1

Eh bien, je l'ai. Je l'ai réussi à travailler avec succès.

Public Sub ModifyFontStyle(Optional ByVal Plain As Object = Nothing, Optional ByVal Bold As Object = Nothing, _ 
          Optional ByVal Italics As Object = Nothing, Optional ByVal Underlined As Object = Nothing) 
    Dim newFontStyle As System.Drawing.FontStyle 


    If Plain Then 
     newFontStyle = Drawing.FontStyle.Regular 
     GivenFont = New Drawing.Font(GivenFont.FontFamily, GivenFont.Size, newFontStyle) 
     Exit Sub 
    End If 

    If Bold IsNot Nothing Then 
     If Bold And Not GivenFont.Bold Then 
      newFontStyle = GivenFont.Style + Drawing.FontStyle.Bold 
     Else 
      newFontStyle = GivenFont.Style - Drawing.FontStyle.Bold 
     End If 
    End If 


    If Italics IsNot Nothing Then 
     If Italics And Not GivenFont.Italic Then 
      newFontStyle = GivenFont.Style + Drawing.FontStyle.Italic 
     Else 
      newFontStyle = GivenFont.Style - Drawing.FontStyle.Italic 
     End If 
    End If 

    If Underlined IsNot Nothing Then 
     If Underlined And Not GivenFont.Underline Then 
      newFontStyle = GivenFont.Style + Drawing.FontStyle.Underline 
     Else 
      newFontStyle = GivenFont.Style - Drawing.FontStyle.Underline 
     End If 
    End If 

    GivenFont = New Drawing.Font(GivenFont.FontFamily, GivenFont.Size, newFontStyle) 

End Sub 

Merci pour votre temps!

Questions connexes