2010-06-23 4 views
0

키를 후크하는 데이 library을 사용하고 있는데 e.KeyCode.ToString()을 동일한 문자열과 비교할 때 몇 가지 문제가 있습니다. 내가 XML 파일에서 해당 문자열을 읽고 내가 변환 할 수있는 방법을 얻을 수없는 것 때문에 문자열에 보관> Program.KeyboardTradeHotkey = "Oemtilde";문자열 비교가 올바르게 작동하지 않습니까?

-

나는

Keys.Oemtilde의 문자열과 동일 변수가 문자열은 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]"); 
      } 

. 문자열 비교처럼 정말이 경우에 작동도 네가 모두 문자열 (e.KeyCode.ToString()와 Program.KeyboardTradeHotkey가 동일하지 않는 것 같다.

이것에 대한 이유가 될 수있는 것

?

+0

'e.KeyCode.ToString()'과'Program.KeyboardTradeHotKey'의 결과를 점검하여 a) 케이스가 동일하고 b) 선행 또는 후행 공백이 없는지 확인 했습니까? – ChrisF

+0

[14 : 31 : 11.107988] - [키보드] [프레스] | Oemtilde | True | Oemtilde | True Escape 변수에 \ n이 있음을 나타냅니다. 어떻게 거기에있어 ..하지만 재밌는 일은 로그 파일이 정확히 똑같은 것을 보여 주지만 내가 여기에 붙여 넣었을 때 Oemtilde 이후에 \ n이 표시되어 Trim()이 그것을 고쳤다는 것을 보여주었습니다. – MadBoy

답변

3

I KeyCode.ToString()는 당신이 그것을 반환하기 위해 무엇을 기대 반환하지 않습니다 때문입니다 생각합니다. 조사 식의보기 봐.

+1

실제로 로그에 차이가 보이지 않지만 로그 파일에서 복사 한 후 여기에 붙여 넣으면 Oemtilde 다음에 새로운 줄이 표시되므로 .Trim()을 사용하면 효과가 있습니다. 감사. – MadBoy

4

또 다른 변화를 string.Equals의 사용은 문자열을

string1.Equals(string2) 
0
을 비교하는 기능을하게

==와 .Equals()의 차이는 차이가 있기 때문입니다. 참조 유형과 값 유형 사이의 관계. 이 링크는 다른 결과의 예를 보여줍니다. Comparison of == and .Equals()

나는 또한 pranay_stacker에 동의합니다.

+0

아티클은 문자열에 대해 ==를 제안합니다. "언제 어떤 연산자를 사용해야합니까? 나의 경험에 따르면, 거의 모든 참조 유형에 대해 참조 동일성보다는 동일성을 테스트 할 때 Equals를 사용합니다. 예외는 문자열 - ==를 사용하여 문자열을 비교하면 작업이 훨씬 간단하고 읽기 쉽도록 만들어 지지만 비교 연산자가 제대로 작동하려면 연산자의 양쪽이 문자열 유형의 표현이어야한다는 것을 기억해야합니다. " 단지 조심해야합니다. – MadBoy

0

첫 번째 (작동중인) 코드 샘플을 사용하고있는 라이브러리를 보지 않아도 열거 형 값을 비교하는 것처럼 보이므로 문자열 대신 숫자가 반환됩니다.

+0

문자열로 변환하면 반환되는 문자열입니다. F1 키를 누르면 F1을 표시합니다. 'Oemtilde 등을 얻을 것입니다. 그곳에 이상한 새 줄이 있습니다. – MadBoy

관련 문제