我正在制作一个程序,它使用热键来处理各种事情。 这些热键将是用户可设置的,因此如果在退出时保存这些热键会很好。 由于键盘上的键数量相当大(包括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。
答案 0 :(得分:0)
虚假警报的人,它的工作原理就像它应该的那样,除了某些原因,Comboboxes没有返回带有.SelectedValue的值,而是由于某种原因必须使用.SelectedItem。 无论如何,它现在完美无缺。感谢每个人的时间,并且可能这个帖子在将来因为不使用.SelectedItem打了一个人。