Created
March 7, 2019 03:40
-
-
Save Vitokhv/f678fab057d51740035134bd01fbb84a to your computer and use it in GitHub Desktop.
Форма добавления и удаления значений в listBox
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Data; | |
using System.Linq; | |
using System.Windows.Forms; | |
using Microsoft.Win32; | |
namespace AppName | |
{ | |
public partial class FormGuid : Form | |
{ | |
public FormGuid() | |
{ | |
InitializeComponent(); | |
} | |
// Путь к файлу конфигурации (может использоваться за пределами методов) | |
IniFile ini = new IniFile(Environment.ExpandEnvironmentVariables("%ProgramFiles%\\AppFolder\\config.ini")); | |
private void FormGuid_Load(object sender, EventArgs e) | |
{ | |
// Выбор нескольких элементов в listBox (SHIFT или CTRL) | |
listBoxPatch.SelectionMode = SelectionMode.MultiExtended; | |
// Загрузка всех ключей в listBox (если в файле конфигурации есть ключи) | |
if (ini.ReadKeys("GUID") != null) | |
{ | |
string[] values = ini.ReadKeys("GUID"); | |
foreach (var key in values) | |
listBoxPatch.Items.Add(key); | |
} | |
else | |
{ | |
//MessageBox.Show("Не удалось загрузить все ключи в список"); | |
} | |
} | |
// Шаблон записи в реестр с проверкой повторяющихся элементов | |
private void WriteRegKey(string keyName, string value) | |
{ | |
try | |
{ | |
// Проверка на добавление повторяющихся элементов в ListBox | |
//if (!listBoxPatch.Items.ToString().ToLower().Contains(value.ToLower())) | |
if (!listBoxPatch.Items.Cast<object>().Any(x => x.ToString().ToLower() == value.ToLower())) | |
{ | |
// Переменные для подключения к разделу реестра | |
var guidText = (Guid.NewGuid().ToString("B")); // Генерирование GUID значения для guidText | |
RegistryKey lm = Registry.LocalMachine; | |
RegistryKey cs1 = lm.CreateSubKey("SOFTWARE\\001"); | |
RegistryKey cs2 = cs1.CreateSubKey(guidText); | |
cs2.SetValue("Description", "FixSecurity"); // Запись ключа и его значения в реестр | |
cs2.SetValue(keyName, value, RegistryValueKind.ExpandString); // Запись ключа и его значения в реестр | |
cs2.SetValue("SaferFlags", "0", RegistryValueKind.DWord); // Запись ключа и его значения в реестр | |
// Сохранение ключа и его значения в config.ini (value имя ключа / guidText имя раздела) | |
ini.Write(value, guidText, "GUID"); | |
// Добавление имени элемента из textBox в listBox | |
listBoxPatch.Items.Add(value); | |
textBoxPatch.Focus(); | |
textBoxPatch.Clear(); | |
} | |
else | |
{ | |
listBoxPatch.SelectedItems.Clear(); // Очистка выделенных элементов | |
for (int i = listBoxPatch.Items.Count - 1; i >= 0; i--) | |
{ | |
//if (listBoxPatch.Items[i].ToString().ToLower().Contains(textBoxPatch.Text.ToLower())) | |
//if (listBoxPatch.Items[i].ToString().ToLower() == textBoxPatch.Text.ToLower()) | |
if (listBoxPatch.Items[i].ToString().ToLower().Equals(value.ToLower())) | |
{ | |
listBoxPatch.SetSelected(i, true); // Выделение найденного элемента в списке | |
} | |
} | |
//listBoxPatch.Items.Remove(textBoxPatch.Text); | |
//textBoxPatch.Text = ""; | |
textBoxPatch.Focus(); | |
textBoxPatch.Clear(); | |
MessageBox.Show("Значение уже есть в списке"); | |
} | |
} | |
catch (Exception ex) | |
{ | |
MessageBox.Show(ex.Message); | |
} | |
} | |
// Шаблон чтения реестра | |
private string ReadKey(string key) | |
{ | |
string kq = ""; | |
try | |
{ | |
RegistryKey lm = Registry.LocalMachine; | |
RegistryKey cs = lm.CreateSubKey("SOFTWARE\\001"); | |
kq = (string)cs.GetValue(key); | |
} | |
catch (Exception ex) | |
{ | |
MessageBox.Show(ex.Message); | |
} | |
return kq; | |
} | |
// Шаблон удаления раздела реестра | |
private void RemoveSubName(string subName) | |
{ | |
try | |
{ | |
RegistryKey lm = Registry.LocalMachine; | |
RegistryKey os = lm.OpenSubKey("SOFTWARE\\001", true); | |
os.DeleteSubKey(subName, false); | |
} | |
catch (Exception ex) | |
{ | |
MessageBox.Show(ex.Message); | |
} | |
} | |
// Добавление записи из textBoxPatch | |
private void buttonSave_Click(object sender, EventArgs e) | |
{ | |
if (textBoxPatch.Text != "") | |
{ | |
WriteRegKey("ItemData", textBoxPatch.Text); | |
} | |
else | |
{ | |
textBoxPatch.Focus(); | |
//MessageBox.Show("Введите путь к папке или файлу"); | |
} | |
} | |
// Удаление выбранных записей из listBoxPatch | |
private void buttonRemove_Click(object sender, EventArgs e) | |
{ | |
var patchesToDelete = listBoxPatch.SelectedItems.Cast<string>().ToList(); | |
foreach (string patch in patchesToDelete) | |
{ | |
var readPatch = ini.Read(patch, "GUID"); // Получение значений из файла config.ini | |
RemoveSubName(readPatch); // Удаление раздела в реестре по выбранному значению | |
ini.DeleteKey(patch, "GUID"); // Удаление выбранного значения в файле config.ini | |
listBoxPatch.Items.Remove(patch); // Удаление выбранных элементов в listBox | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Код рабочий, но есть необходимость его упростить и упорядочить.
На изображении показано, если вставить значение отличающееся регистром, то в методе
WriteRegKey
производится проверка в нижем регистре обоих значений, вlistBox
иtextBox
(добавление отклонится и выделится элемент в списке с таким же значением).Содержимое
config.ini
выглядит так (p.s. необходимо поменять местами значение и ключ):Источники: #1 #2 #3