Сохранить System.Windows.Forms.Kys как параметр - PullRequest
0 голосов
/ 09 июня 2011

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

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

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

// (..some code ommitted) 
if (comboBox_hotkeys_uploadclipboard_modifier.SelectedText != "" && 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));
    }
}

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

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

РЕДАКТИРОВАТЬ:

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

    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 && 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);
        }
    }

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

1 Ответ

0 голосов
/ 10 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...