2009-05-15 10 views
0

La classe FontDialog en C# a une propriété "AllowScriptChange" qui permet à l'utilisateur de sélectionner le script (occidental, hébreu, arabe, turc, etc.). Lorsqu'elle est activée, la liste déroulante fournit toutes ces options et tout ce qui est disponible en fonction de la police sélectionnée.Comment convertir "byte gdicharset" en nom de script/langue?

Si la boîte de dialogue aboutit, la police sélectionnée a GdiCharSet pour définir une valeur comprise entre 0 et 255. 177 est l'hébreu, 161 est le grec, etc. Existe-t-il une fonction qui convertira de la valeur en chaîne? Je peux écrire une déclaration de changement moi-même, mais je voudrais le faire dans le bon sens.

Voici une liste partielle: http://msdn.microsoft.com/en-us/library/cc194829.aspx

Modifier: Une fonction qui convertira de charset codepage fonctionnerait aussi, parce que je pense que l'obtention du nom d'une page de code devrait être facile.

Répondre

4

Si vous ne voulez pas utiliser un commutateur, qu'en est-il de l'utilisation d'une énumération? Quelque chose comme:

public enum CharSet : byte 
{ 
     ANSI_CHARSET = 0, 
     DEFAULT_CHARSET = 1, 
     SYMBOL_CHARSET = 2, 
     SHIFTJIS_CHARSET = 128, 
     HANGEUL_CHARSET = 129, 
     HANGUL_CHARSET = 129, 
     GB2312_CHARSET = 134, 
     CHINESEBIG5_CHARSET = 136, 
     OEM_CHARSET = 255, 
     JOHAB_CHARSET = 130, 
     HEBREW_CHARSET = 177, 
     ARABIC_CHARSET = 178, 
     GREEK_CHARSET = 161, 
     TURKISH_CHARSET = 162, 
     VIETNAMESE_CHARSET = 163, 
     THAI_CHARSET = 222, 
     EASTEUROPE_CHARSET = 238, 
     RUSSIAN_CHARSET = 204 
    } 

Et vous pouvez mettre en place une méthode d'extension si vous utilisez .NET 3.5

public static class GdiCharHelper 
{ 
    public static string ToGdiName(this byte GdiCharSet) 
    { 
      return Enum.GetName(typeof(CharSet), GdiCharSet); 
    } 
} 

Ainsi, vous pouvez l'utiliser dans votre code comme ceci:

string name = Font.GdiCharSet.ToGdiName(); 

EDIT : Maintenant que je pense à ce sujet, vous devriez probablement changer la valeur de retour de la méthode d'extension pour être l'enum, donc:

return (CharSet)GdiCharSet; 

De cette façon, vous pouvez comparer aussi:

If (Font.GdiCharSet.ToCharSet() == CharSet.ANSI_CHARSET) {...} 
Questions connexes