1

私はホットキーに以下のコードを使用していて、それに変数を使用したいのですが、それは私を許可しません:

private globalKeyboardHook Pvt = new globalKeyboardHook();
private globalKeyboardHook Group = new globalKeyboardHook();
string pvtHotkey = Properties.Settings.Default["pvtHotkey"].ToString();
Pvt.HookedKeys.Add(Keys.F5);
Pvt.KeyDown += new KeyEventHandler(ghk_startPvt);
Group.HookedKeys.Add(Keys.F6);
Group.KeyDown += new KeyEventHandler(ghk_startGroup);

私はこれをしたいと思います:

string pvtHotkey = Properties.Settings.Default["pvtHotkey"].ToString();
Pvt.HookedKeys.Add(pvtHotkey);
Pvt.KeyDown += new KeyEventHandler(ghk_startPvt);

エラー'System.Collections.Generic.List.Add(System.Windows.Forms.Keys)'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります

'System.Collections.Generic.List.Add(System.Windows.Forms.Keys)'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります

何か案は?

4

1 に答える 1

0

問題

間違っている場合は訂正してください。ただし、The Code Project の記事A Simple C# Global Low Level Keyboard Hookのソース ファイルを使用しているようです。
その場合、HookedKeys リストは文字列ではなく Keys 列挙型を含むことを意図していたため、このエラーが発生しています。

    public List<Keys> HookedKeys = new List<Keys>();

ソリューション

リストに追加する前に文字列を Keys 列挙型に変換することで、これを修正できます。

含む:

    using System.ComponentModel;

コード:

    private void Form1_Load(object sender, EventArgs e)
    {
        string pvtHotkey = Properties.Settings.Default["pvtHotkey"].ToString();
        Keys converted = (Keys)TypeDescriptor.GetConverter(typeof(Keys)).ConvertFromString(pvtHotkey);
        Pvt.HookedKeys.Add(converted);
        Pvt.KeyDown += new System.Windows.Forms.KeyEventHandler(ghk_startPvt);
    }

    void ghk_startPvt(Object sender, System.Windows.Forms.KeyEventArgs e)
    {
        System.Console.WriteLine("Pressed!");
        e.Handled = true;
    } 
于 2012-06-13T10:30:58.017 に答える