RichTextBox: testo contemporaneamente italic e grassetto

giovedì 07 febbraio 2008 - 11.03

Giovanni_3478 Profilo | Senior Member

Ciao

Ho un richTextBox

che mi permette di far diventare il testo in esso contenuto
bold oppure italic ecc
con rtb.SelectionFont.Bold rtb.SelectionFont.Italic

Se io volessi far diventare il testo si Bold che italic
quindi volessi avere un testo italic in grassetto,
come dovrei fare?

Potre usare la proprietà selectionRtf e inserire del codice Rtf.
Ci sono altri metodi?

aiedail92 Profilo | Expert

Ciao

per ottenere uno stile combinato devi utilizzare l'operatore | (Or in VB) sull'enumerazione FontStyle:

Font originalFont = richTextBox.SelectionFont; richTextBox.Font = new Font(originalFont, FontStyle.Bold | FontStyle.Italic);

Luca

Giovanni_3478 Profilo | Senior Member

Sì funziona

se avessi un FontStyle Ft = FontStyle.Bold | FontStyle.Italic;
e da Ft volessi eliminare il FontStyle.Bold come dovrei fare?

aiedail92 Profilo | Expert

Ci sono diversi metodi:

Se devi mantenere tutti gli altri attributi e rimuovere soltanto Bold devi eseguire l'intersezione (usando And) fra gli attributi attuali e l'insieme di tutti gli attributi possibili meno quello da rimuovere (è più difficile dirlo che farlo ):

FontStyle tuttiMenoBold = FontStyle.Italic | FontStyle.Strikeout | FontStyle.Underline; FontStyle original = tuoFont.Style; FontStyle newStyle = original & tuttiMenoBold;

Quindi riassumendolo in una funzione più generica:

public FontStyle RemoveStyle(FontStyle originale, FontStyle daRimuovere) { //Questi sono tutti gli stili componibili fra di loro FontStyle tutti = FontStyle.Bold | FontStyle.Italic | FontStyle.Strikeout | FontStyle.Underline; //Dall'insieme di tutti gli stili rimuovo quello da togliere //utilizzando l'xor FontStyle tuttiMenoQuelloDaRimuovere = tutti ^ daRimuovere; return (originale & tuttiMenoQuelloDaRimuovere); }

Altra soluzione (che ti consente di non inizializzare un campo dove combinare tutte le possibilità) è di controllare se lo stile da rimuovere è già presente, e se si rimuoverlo usando semplicemente l'xor. Io ti consiglio quest'ultima:

public FontStyle RemoveStyle(FontStyle originale, FontStyle daRimuovere) { //Così controllo se lo stile da rimuovere //è già contenuto nello stile originale if ((originale & daRimuovere) == daRimuovere) { //Se si lo rimuovo con l'xor return (originale ^ daRimuovere); } else { //Altrimenti ritorno l'originale return originale; } }

Se non fosse stato fatto prima il controllo l'effetto dell'xor sarebbe stato quello di rimuovere il nuovo FontStyle se era presente e di inserirlo se non era presente, anche questo molto utile se vuoi switchare uno o più attributi dello stile

Luca

Giovanni_3478 Profilo | Senior Member

mi sei stato di grande aiuto

Per il contesto in cui mi trovavo
ho usato la seconda soluzione.

Grazie

Ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5