将System.Windows.Forms.Keys保存为设置

时间:2011-06-09 11:57:53

标签: c# settings key

我正在制作一个程序,它使用热键来处理各种事情。 这些热键将是用户可设置的,因此如果在退出时保存这些热键会很好。 由于键盘上的键数量相当大(包括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 :(得分:0)

虚假警报的人,它的工作原理就像它应该的那样,除了某些原因,Comboboxes没有返回带有.SelectedValue的值,而是由于某种原因必须使用.SelectedItem。 无论如何,它现在完美无缺。感谢每个人的时间,并且可能这个帖子在将来因为不使用.SelectedItem打了一个人。