Как использовать comboBox, чтобы передать переменную типа RegistryValueKind для метода RegistryKey.SetValue()?

У меня есть ArrayList:

static public ArrayList regValueKindsList = new ArrayList();

Я его заполняю типами значений (параметров):

        Reg.regValueKindsList.Add("REG_SZ");
        Reg.regValueKindsList.Add("REG_EXPAND_SZ");
        Reg.regValueKindsList.Add("REG_BINARY");
        Reg.regValueKindsList.Add("REG_DWORD");
        Reg.regValueKindsList.Add("REG_MULTI_SZ");
        Reg.regValueKindsList.Add("REG_QWORD");

Затем этот список передается в comboBox:

comboBox_parData.DataSource = Reg.regValueKindsList;

В программе при создании параметра я вызываю эту форму: введите сюда описание изображения

Здесь выбираю тип параметра из comboBox, а также имя и значение.

При нажатии на кнопку вся эта информация передается в поля отдельного класса (для передачи информации между формами):

                Data.newParName = textBox_parName.Text;
                Data.newParType = (RegistryValueKind)comboBox_parData.SelectedItem; 
                Data.newParValue = textBox_parValue.Text;

Вот как я создал эти поля:

    public static RegistryValueKind newParType { get; set; }
    public static string newParName { get; set; }
    public static string newParValue { get; set; }

Обратите внимание на приведение типов; В comboBox используется тип object (так как данные получены из ListArray), а для метода .SetValue() нужен тип RegistryValueKind.

А затем эти переменные используются для создания нового параметра:

selRegKeyOpened.SetValue(Data.newParName, Data.newParValue, Data.newParType);

Возникает ошибка: введите сюда описание изображения

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


Ответы (2 шт):

Автор решения: Aziz Umarov

Так попробуйте

(RegistryValueKind) Enum.Parse(typeof(RegistryValueKind), comboBox_parData.SelectedValue, true);
→ Ссылка
Автор решения: aepot

Я не знаю, как вам удается ловить ошибки на ровном месте, но у меня получилось вот так

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // заполняю список из перечисления с помощью Enum.GetValues и Linq
        List<string> values = Enum.GetValues(typeof(RegistryValueKindNative)).Cast<RegistryValueKindNative>().Where(x => x > 0).Select(x => x.ToString()).ToList();
        comboBox1.DataSource = values;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        RegistryValueKind kind = (RegistryValueKind)Enum.Parse(typeof(RegistryValueKindNative), comboBox1.SelectedItem.ToString());
        MessageBox.Show(kind.ToString());
    }
}

public enum RegistryValueKindNative
{
    NONE = -1,
    UNKNOWN = 0,
    REG_SZ = 1,
    REG_EXPAND_SZ = 2,
    REG_BINARY = 3,
    REG_DWORD = 4,
    REG_MULTI_SZ = 7,
    REG_QWORD = 11
}

введите сюда описание изображения

→ Ссылка