abdul subhan mohammed Ответов: 1

Как создать перечисление для семейства шрифтов в C#


Дорогие Все,

У меня есть приложение windows, в котором мы автоматизируем MS-OFFICE 2013/16.

Теперь мы пытаемся сравнить семейство шрифтов,для этого я хочу создать семейство шрифтов enum.

Есть ли в WordInterop перечисление семейства шрифтов?

Что я уже пробовал:

Потому что имена шрифтов имеют пробел, поэтому я застрял, как создать это перечисление
public enum FontFamilies
{
  Arial,
  Arial Narrow//Error
}


может кто-нибудь плз, помогите мне...


Спасибо

1 Ответов

Рейтинг:
9

CHill60

У вас есть несколько вариантов.

Во-первых, вы можете перечислить все шрифты, установленные в вашей системе - см. Как: перечислить установленные шрифты[^]

Если вы хотите создать свое собственное перечисление, вы можете иметь описания с такими пробелами (ref:c# - могут ли мои перечисления иметь дружественные имена?[^])

//Requires using System.ComponentModel;
public enum FontFamilies
{
    [Description("Ariel")]
    Ariel,
    [Description("Arial Narrow")]
    ArialNarrow,
    [Description("Times New Roman")]
    TimesNewRoman
};
Чтобы получить эти описания, вы можете сделать это (та же ссылка, что и выше):
//Requires using System.Reflection;
public static string GetDescription(Enum value)
{
    Type type = value.GetType();
    string name = Enum.GetName(type, value);
    if (name != null)
    {
        FieldInfo field = type.GetField(name);
        if (field != null)
        {
            DescriptionAttribute attr =
                        Attribute.GetCustomAttribute(field,
                        typeof(DescriptionAttribute)) as DescriptionAttribute;
            if (attr != null)
            {
                return attr.Description;
            }
        }
    }
    return null;
}


Альтернативный метод состоит в том, чтобы расширить enum видеть - c# - могут ли мои перечисления иметь дружественные имена? - переполнение стека[^]
public enum FontFamilies2
{
     Ariel,
     ArialNarrow,
     TimesNewRoman
};
public static class ExtensionMethods
{
    public static string EnumValue(this FontFamilies2 e)
    {
        switch (e)
        {
            case FontFamilies2.Ariel:
                return "Ariel";
            case FontFamilies2.ArialNarrow:
                return "Ariel Narrow";
            case FontFamilies2.TimesNewRoman:
                return "Times New Roman";
        }
        return "Where did you find that value";
   }
}
И вот как вы получите доступ к этим описаниям соответственно:
System.Diagnostics.Debug.Print(GetDescription(FontFamilies.TimesNewRoman));
System.Diagnostics.Debug.Print(FontFamilies2.TimesNewRoman.EnumValue());


[EDIT OP теперь заявляет, что они хотят получить это описание в виде списка]
Предполагая, что вы пошли за [Description...] атрибут тогда вы можете сделать это:
//Requires using System.Collections.Generic;
var fonts = new List<string>();
foreach (var x in Enum.GetValues(enumType: typeof (FontFamilies)))
    fonts.Add(GetDescription(x as Enum));
или версия Linq
var fonts = (from object x in Enum.GetValues(enumType: typeof (FontFamilies)) select GetDescription(x as Enum)).ToList();


Karthik_Mahalingam

5 для атрибутов

abdul subhan mohammed

Спасибо Чили, но я хочу отобразить описание enum в виде списка, а не значения enum. Пожалуйста, нажмите на ссылки, чтобы проверить мой код.

https://drive.google.com/open?id=0Bz2clgZZZsl4eUVWRUwzclBZalk

https://drive.google.com/open?id=0Bz2clgZZZsl4bWEwZllmanU4Yk0

CHill60

Затем просто поместите описание в список вместо значения. Я не могу связаться с вашим кодом на этом устройстве.

abdul subhan mohammed

код
общественные EvaluateFontName(IQuestion вопрос) : основание(вопрос: "Оцените название шрифт", новый ModuleType[] { ModuleType.Word2013 })
{
Дефинепараметр(
"WordFile",
"Имя файла нового файла, который будет создан",
ложный);

Дефинепараметр(
"Текст",
"Текст должен быть изменен",
ложный);

Дефинепараметр(
"Имя шрифта",
"имя шрифта",
typeof(FontFamily));//FontFamily-это перечисление, я хочу отобразить описание, а не значения.
}

CHill60

Почему вы используете typeof ()? А что такое Дефинепараметр? Какой из трех предложенных мною вариантов вы на самом деле решили использовать?
Вы слишком расплывчаты.

CHill60

Я обновил свое решение с помощью способа получения описаний в список