Показать перечисление в ComboBox с пробелами

У меня есть перечисление, пример:

enum MyEnum
{
My_Value_1,
My_Value_2
}

С :

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));

Но теперь мой вопрос: как я могу заменить & quot; _ & quot; с & quot; & Quot; так что становится элементы с пробелами вместо подчеркивания? И этот объект с данными еще работает

 John Saunders18 июл. 2009 г., 17:33
Увидетьthis answer на вопросHow do I override ToString in C# enums?.
 user214017305 мар. 2014 г., 10:26

Ответы на вопрос(7)

определяющий перечисление, чтобы вы могли добавлять атрибуты к значениям без изменения фактических значений перечисления, то вы можете использовать этот метод расширения.

/// <summary>
/// Retrieve the description of the enum, e.g.
/// [Description("Bright Pink")]
/// BrightPink = 2,
/// </summary>
/// <param name="value"></param>
/// <returns>The friendly description of the enum.</returns>
public static string GetDescription(this Enum value)
{
  Type type = value.GetType();

  MemberInfo[] memInfo = type.GetMember(value.ToString());

  if (memInfo != null && memInfo.Length > 0)
  {
    object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);

    if (attrs != null && attrs.Length > 0)
    {
      return ((DescriptionAttribute)attrs[0]).Description;
    }
  }

  return value.ToString();
}

хотя я бы использовал другую переменную, отличную от 'e' apos; такие как «en»; поэтому ответ можно использовать в обработчиках событий с меньшими трудностями; & APOS; е & APOS; в обработчиках событий, как правило,EventArgs аргумент. Что касается LINQ иIEnumerable подход, мне кажется, более сложным и трудным для адаптации не-WPFComboBoxс .NET 3.5

что это не очень хорошая идея, чтобы отобразить внутреннее имя enum в пространство пользователя. Что делать, если вы реорганизуете свой enum-значение? Поэтому я предлагаю вам взглянуть на этостатья (Локализация .NET Enums), Используя технику, описанную в этой статье, вы можете не только заменить & apos; _ & apos; с пробелами, но также делают различные представления enum для разных языков (используя ресурсы).

 09 июл. 2009 г., 11:15
я хочу использовать мое enum динамически .... плз посмотреть мой вопрос
 09 июл. 2009 г., 13:13
Что вы подразумеваете под динамически? Вы только связываете все значения в поле со списком. И статья, которую я упомянул, прекрасно вписывается в это.

вы можете сделать что-то вроде этого:

Enum.GetValues(typeof(MyEnum))
    .Cast<MyEnum>()
    .Select(e=> new
                {
                    Value = e,
                    Text = e.ToString().Replace("_", " ")
                });

Это вернет вам IEnumerable анонимного типа, который содержитValue свойство, то есть сам тип перечисления, иText свойство, которое будет содержать строковое представление перечислителя с подчеркиванием, замененным пробелом.

Назначение свойства Value заключается в том, что вы можете точно знать, какой перечислитель был выбран в комбинированном списке, без необходимости возвращать подчеркивания и анализировать строку.

 09 июл. 2009 г., 10:45
cboBLVisual.SelectedValue = Enum.Value в этой строке отображается сообщение об ошибке ... ниже сообщение Не удается установить SelectedValue в ListControl с пустым ValueMember.
 09 июл. 2009 г., 08:43
После замены _ пробелом cboBLVisual.SelectedItem = Enum.Value; Почему не работает?
 09 июл. 2009 г., 08:34
я сделал это, но теперь проблема в cboSurveyRemarksType.SelectedItem .... я не могу установить выбранный элемент ..... как это сделать
 09 июл. 2009 г., 09:03
SelectedItem не работает, поскольку он ссылается на анонимный тип, который мы создали с помощью запроса (тип со свойствами Value / Text), вы должны использовать свойство SelectedValue, cboBLVisual.SelectedValue = Enum.Value
 09 июл. 2009 г., 11:12
покажи мне ссылку, которая поможет мне решить проблему

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum))
                           .Cast<MyEnum>()
                           .Select(e => new { Value = e, Description = e.ToString().Replace("_"," ") })
                           .ToList();
comboBox1.DisplayMember = "Description";
comboBox1.ValueMember = "Value";

... хотя я был бы более склонен использовать & quot; Описание & quot; атрибут(as per Steve Crane's answer).

вы можете добавить этот класс расширения:

public static class EnumExtensions {

    public static List<string> GetFriendlyNames(this Enum enm) {
        List<string> result = new List<string>();
        result.AddRange(Enum.GetNames(enm.GetType()).Select(s => s.ToFriendlyName()));
        return result;
    }

    public static string GetFriendlyName(this Enum enm) {
        return Enum.GetName(enm.GetType(), enm).ToFriendlyName();
    }

    private static string ToFriendlyName(this string orig) {
        return orig.Replace("_", " ");
    }
}

А затем, чтобы настроить поле со списком, вы просто делаете:

MyEnum val = MyEnum.My_Value_1;
comboBox1.DataSource = val.GetFriendlyNames();
comboBox1.SelectedItem = val.GetFriendlyName();

Это должно работать с любым Enum. Вы должны убедиться, что у вас есть оператор using для пространства имен, включающего класс EnumExtensions.

Вот именно то, что вам нужно сделать:

comboBox1.Items.Clear();
MyEnum[] e = (MyEnum[])(Enum.GetValues(typeof(MyEnum)));
for (int i = 0; i < e.Length; i++)
{
    comboBox1.Items.Add(e[i].ToString().Replace("_", " "));
}

Чтобы установить выбранный элемент в выпадающем списке, сделайте следующее:

comboBox1.SelectedItem = MyEnum.My_Value_2.ToString().Replace("_", " ");
 09 июл. 2009 г., 08:28
cboSurveyRemarksType.SelectedItem как установить это ..... нужна помощь
 09 июл. 2009 г., 08:00
Я отредактировал свой ответ, чтобы включить именно то, что вам нужно сделать.
 09 июл. 2009 г., 07:52
Мое перечисление имеет 10 значений, как установить их вручную ...... У вас есть идея установить динамически
 09 июл. 2009 г., 07:54
Переберите все значения в вашем перечислении. Увидеть:stackoverflow.com/questions/972307
 09 июл. 2009 г., 17:39
Я обновил свой ответ, чтобы показать вам, как настроить выбранный элемент.

Ваш ответ на вопрос