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