2010-11-16 23 views
9

J'ai un petit problème. J'ai un 1 RichTextBox et 2 boutons.Soustraire Flag de FontStyle (Toggling FontStyles) [C#]

J'ai ces 2 boutons pour "basculer en gras FStyle" et "basculer Italic FStyle".

Je veux basculer FontStyles sans affecter les autres FontStyles. J'espère que tu me comprends.

Ci-dessous le code fonctionne lorsque combinant FontStyles mais ne fonctionne pas lorsque seperating/retranchant FontStyles.

private void button1_Click(object sender, EventArgs e) 
{ 
    richTextBox1.SelectionFont = new Font(richTextBox1.Font, (richTextBox1.SelectionFont.Bold == false ? richTextBox1.SelectionFont.Style | FontStyle.Bold : richTextBox1.SelectionFont.Style)); 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    richTextBox1.SelectionFont = new Font(richTextBox1.Font, (richTextBox1.SelectionFont.Italic == false ? richTextBox1.SelectionFont.Style | FontStyle.Italic : richTextBox1.SelectionFont.Style)); 
} 
  1. Je fais du texte sélectionné en gras
  2. I rendre le texte sélectionné Italique
  3. Je veux enlever Italique en gras est toujours actif (ou face)
+0

Une approche similaire de la solution pour cela s'applique également aux contrôles 'TextBox'. Voir mon commentaire dans la réponse ci-dessous. –

Répondre

8

La meilleure façon est de utilisez XOR bit à bit (^), qui ne fait que basculer la valeur:

private void button1_Click(object sender, EventArgs e) 
{ 
    richTextBox1.SelectionFont = new Font(richTextBox1.Font, 
     richTextBox1.SelectionFont.Style^FontStyle.Bold); 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    richTextBox1.SelectionFont = new Font(richTextBox1.Font, 
     richTextBox1.SelectionFont.Style^FontStyle.Italic); 
} 
+0

Merci, ça a marché !! – Dada

+4

Attention! Si la sélection de texte en cours a plus d'une police, SelectionFont sera null http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(SYSTEM.WINDOWS.FORMS.RICHTEXTBOX.SELECTIONFONT) k (TargetFrameworkMoniker-% 22.NETFRAMEWORK% 2cVERSION% 3dV4.0% 22); k (DevLang-VB) & rd = true – Matthieu

+0

Une approche similaire fonctionne également avec les contrôles TextBox. La différence étant que 'SelectionFont' dans l'exemple ci-dessus devrait être changé en' Font'. –