Как использовать 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 шт):
Так попробуйте
(RegistryValueKind) Enum.Parse(typeof(RegistryValueKind), comboBox_parData.SelectedValue, true);
Я не знаю, как вам удается ловить ошибки на ровном месте, но у меня получилось вот так
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
}

