Добавить варианты ComboBox во время выполнения в C#
В этом примере вы можете добавить ComboBox варианты, когда пользователь выбирает их во время выполнения. Чтобы отслеживать выбор для будущего использования, он сохраняет их в реестре.
Пример
class RegistryTools { // Сохранение значения. public static void SaveSetting(string app_name, string section, string name, object value) { RegistryKey reg_key = Registry.CurrentUser.OpenSubKey("Software", true); RegistryKey app_key = reg_key.CreateSubKey(app_name); RegistryKey section_key = app_key.CreateSubKey(section); section_key.SetValue(name, value); } // Получаем значение. public static object GetSetting(string app_name, string section, string name, object default_value) { RegistryKey reg_key = Registry.CurrentUser.OpenSubKey("Software", true); RegistryKey app_key = reg_key.CreateSubKey(app_name); RegistryKey section_key = app_key.CreateSubKey(section); return section_key.GetValue(name, default_value); } // Удалить параметр. public static void DeleteSetting(string app_name, string section, string name) { RegistryKey reg_key = Registry.CurrentUser.OpenSubKey("Software", true); RegistryKey app_key = reg_key.CreateSubKey(app_name); RegistryKey section_key = app_key.CreateSubKey(section); section_key.DeleteValue(name, false); } // Удалить все настройки в разделе. public static void DeleteSettings(string app_name, string section) { RegistryKey reg_key = Registry.CurrentUser.OpenSubKey("Software", true); RegistryKey app_key = reg_key.CreateSubKey(app_name); app_key.DeleteSubKeyTree(section); } }
В этом примере эти методы используются для обновления реестра, когда форма закрывается и извлекает их при загрузке. См. Код и
Напротив, некоторые приложения сохраняют любые изменения в настройках, как только они сделаны, а не ждут окончания программы. Затем, если программа выйдет из строя или будет убита извне, например, диспетчером задач, изменения не будут потеряны.
Следующий код показывает, как программа загружает выбор ComboBox при загрузке формы.
// Загружать сохраненные записи ComboBox. private void Form1_Load(object sender, EventArgs e) { // Сохранение текущих элементов ComboBox. for (int i = 0; ; i++) { string animal = RegistryTools.GetSetting( "howto_add_items_to_combobox", "Animals", "Animal" + i.ToString(), "").ToString(); if (animal == "") break; cboAnimal.Items.Add(animal); } // Если у нас есть выбор, выберите первый. if (cboAnimal.Items.Count > 0) cboAnimal.SelectedIndex = 0; }
Этот код использует метод GetSetting для получения настроек с именами Animal0, Animal1, Animal2 и так далее, пока не найдет отсутствующее имя. В этот момент он отобрал все имена и добавил их к выбору ComboBox.
Следующий код показывает, как программа обновляет записи реестра при закрытии формы.
// Сохранить текущие варианты ComboBox. private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // Удалить предыдущие настройки. RegistryTools.DeleteSettings("howto_add_items_to_combobox", "Animals"); // Сохранение текущих элементов ComboBox. for (int i = 0; i < cboAnimal.Items.Count; i++) { RegistryTools.SaveSetting("howto_add_items_to_combobox", "Animals", "Animal" + i.ToString(), cboAnimal.Items[i]); } }
Этот код удаляет все настройки из раздела «Животные» программы в реестре. Затем он проходит через выбор ComboBox и сохраняет их в реестре в следующий раз, когда программа запускается.
Последний кусок интересного кода в этом примере - это код, который обновляет выбор ComboBox. Когда пользователь вводит новое значение в ComboBox, программа добавляет новое значение в список выбора элемента управления, чтобы пользователь мог быстро выбрать его позже. Программа решает, что пользователь выполнил ввод нового выбора, когда фокус покидает ComboBox. В следующем коде показан обработчик события Leave, который обнаруживает потери фокуса и метод UpdateCombo, который добавляет новый элемент в выбор // Когда фокус покидает элемент управления, обновите его список элементов.
private void cboAnimal_Leave(object sender, EventArgs e)
{
UpdateCombo(cboAnimal);
}
// Если текущий выбор ComboBox отсутствует в его списке, добавьте его.
private void UpdateCombo(ComboBox cbo)
{
// Смотрите, находится ли элемент в списке.
string new_text = cbo.Text;
foreach (object value in cbo.Items)
{
// Если элемент уже в списке, мы закончили.
if (new_text == value.ToString()) return;
}
// Если мы дошли так далеко, его нет в списке, поэтому добавьте его.
cbo.Items.Add(new_text);
}