Сохранить систему.Windows.Формы.Ключи в качестве настройки

#c# #settings #key

#c# #Настройки #Клавиша

Вопрос:

Я создаю программу, которая использует горячие клавиши для различных целей. Эти горячие клавиши будут настраиваться пользователем, и поэтому было бы неплохо, если бы они были сохранены при выходе. Поскольку количество клавиш на клавиатуре довольно велико (включая OEM-клавиши и тому подобное), я не испытываю особой теплоты по отношению к огромному чудовищу клаузул IF.

Я попытался использовать встроенные настройки thingamajigg (Свойства.Настройки.По умолчанию и т.д.) Но, похоже, ключи не сохраняются должным образом. (Это или я делаю что-то не так.)

Это код, который я использую для этого прямо сейчас:

 // (..some code ommitted) 
if (comboBox_hotkeys_uploadclipboard_modifier.SelectedText != "" amp;amp; comboBox_hotkeys_uploadclipboard_key.SelectedText != "")
{
    if (comboBox_hotkeys_uploadclipboard_modifier.SelectedText == "None")
        Properties.Settings.Default.hotkeys_uploadclipboard_modifier = 0;
    else
        Properties.Settings.Default.hotkeys_uploadclipboard_modifier = modifierdict[comboBox_hotkeys_uploadclipboard_modifier.SelectedText];
    Properties.Settings.Default.hotkeys_uploadclipboard_key = keydict[comboBox_hotkeys_uploadclipboard_key.SelectedText];
}
Properties.Settings.Default.Save();
return true;
  

И в начале программы я делаю:

 Dictionary<string, uint> modifierdict = new Dictionary<string, uint>();
Dictionary<string, Keys> keydict = new Dictionary<string, Keys>();

public Form_stuff()
{
    for (int i = 0; i < Enum.GetNames(typeof(ModifierKeysH)).Length; i  )
    {
        modifierdict.Add(Enum.GetNames(typeof(ModifierKeysH))[i], (uint)Enum.GetValues(typeof(ModifierKeysH)).GetValue(i));
    }
    for (int i = 0; i < Enum.GetNames(typeof(Keys)).Length; i  )
    {
        keydict.Add(Enum.GetNames(typeof(Keys))[i], (Keys)Enum.GetValues(typeof(Keys)).GetValue(i));
    }
}
  

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

Кто-нибудь знает (n простой) способ?

Редактировать:

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

     public void SetKeyboardHooks()
    {
        if (!(kbhook == null))
            kbhook.Dispose();
        kbhook = new KeyboardHook();
        //Set clipboard upload hotkey
        kbhook.RegisterHotKey((ModifierKeysH)Properties.Settings.Default.hotkeys_uploadclipboard_modifier, Properties.Settings.Default.hotkeys_uploadclipboard_key);
        kbhook.KeyPressed  = new EventHandler<KeyPressedEventArgs>(kbhook_KeyPressed);
    }

    void kbhook_KeyPressed(object sender, KeyPressedEventArgs e)
    {
        if (e.Modifier == (ModifierKeysH)Properties.Settings.Default.hotkeys_uploadclipboard_modifier amp;amp; e.Key == Properties.Settings.Default.hotkeys_uploadclipboard_key)
        {
            string url = Functions.UploadClipboard();
            Clipboard.SetText(url);
            hificon.ShowBalloonTip(5000, "Upload succesful!", "Uploaded to: "   url,ToolTipIcon.Info);
        }
    }
  

Как вы можете видеть, код далек от завершения. Это просто препятствие, которое я пытаюсь преодолеть..
Главное, что, похоже, не работает, это тот факт, что горячие клавиши фактически не сохраняются. настройки, похоже, не нравятся системе.Windows.Формы.Ключи, а затем также пропускает часть ModifierkeysH, которые сохраняются как uint.

Комментарии:

1. Что именно вы делаете? Есть ли в вашем приложении определенное количество горячих клавиш, которые пользователь может сопоставить с различными действиями, или в вашем приложении есть определенное количество действий, которые пользователь может сопоставить с горячими клавишами, которые он пожелает?

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

Ответ №1:

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