0

このライブラリを使用してキーをフックしていますが、e.KeyCode.ToString()を同じ文字列と比較する際に問題が発生します。

文字列に相当する変数があります

Keys.Oemtilde-> Program.KeyboardTradeHotkey = "Oemtilde";

xmlファイルからその文字列を読み取り、文字列をに変換する方法がないように見えるため、文字列に保持しKeysます。

私がこのように使用する場合:

            if (e.KeyCode.Equals(Keys.Oemtilde)) {
                    Logging.AddToLog("[Keyboard][Check] " + e.KeyCode);
            } else {
                // failed to catch - executes else 
                Logging.AddToLog("[Keyboard][PRESS]");
            }

正常に動作し、:Logging.AddToLog("[Keyboard][Check] " + e.KeyCode);が実行されます。

私がそれを使用する場合:

            if (e.KeyCode.ToString() == Program.KeyboardTradeHotkey) {
                    Logging.AddToLog("[Keyboard][Check] " + e.KeyCode);
            } else {
                // failed to catch - executes else 
                Logging.AddToLog("[Keyboard][PRESS]");
            }

else句を実行します。この場合、文字列(e.KeyCode.ToString()とProgram.KeyboardTradeHotkeyが同じでも)は実際には機能しないようです。

これの理由は何でしょうか?

4

4 に答える 4

4

別の変更では、string.Equals関数を使用して文字列を比較します

string1.Equals(string2)
于 2010-06-23T13:00:08.060 に答える
3

KeyCode.ToString()が期待どおりの結果を返さないためだと思います。ウォッチでビューを見てください。

于 2010-06-23T12:57:22.883 に答える
0

==と.Equals()の違いは、参照型と値型の違いによるものです。このリンクは、さまざまな結果の例を示しています。==と.Equals()の比較

pranay_stackerにも同意します。

于 2010-06-23T13:04:59.590 に答える
0

最初の(動作中の)コードサンプルを使用しているライブラリを確認する必要がないため、列挙値を比較しているように見えるため、文字列ではなく数値が返されます。

于 2010-06-23T13:05:08.130 に答える