2011-06-09 6 views
0

私は、さまざまなものにホットキーを使用するプログラムを作成しています。 これらのホットキーはユーザーが設定できるので、終了時に保存されると便利です。 キーボード上のキーの量がかなり大きいので(OEMキーなどを含む)、IF塊の巨大な怪物にはあまり暖かくは感じません。設定としてSystem.Windows.Forms.Keysを保存します。

私は組み込みの設定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)); 
    } 
} 

しかし、実際にはキーを保存したり、次のプログラムの起動時に読み込んだりしないようです。 (はい、私はその部分のためのコードを持っています)

誰も(簡単に)方法を知っていますか?

EDIT:あなたはコードはほど遠い見ることができるように

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

正確に何をしていますか?あなたのアプリには、ユーザーがさまざまなアクションに割り当てることができる一定量のホットキーがありますか、またはユーザーが希望するホットキーにマップすることができる一定量のアクションがありますか? – InBetween

+0

アプリには一定のアクションがあります。クリップボードの内容をアップロードしたり、スクリーンショットを作成したりできます。ユーザーはホットキーを各アクションにマップします。プログラムはその後、それらのホットキーを覚えていなければなりません。もう少しコードを追加します。 – Alex

答えて

0

偽のアラームの人は、何らかの理由でコンボボックスが.SelectedValueで値を返さなかったのと同じように動作しますが、何らかの理由で.SelectedItemを使用する必要があります。 いずれにせよ、今は完璧に動作します。みんなのおかげで、このスレッドは将来、.SelectedItemを使用していない人を顔で叩くかもしれません。

関連する問題