2009-07-19 3 views
0

Я использую следующий код, чтобы решить, есть ли '.' (Полная остановка) была введена в элемент управления WebBrowser:HtmlElementEventArgs KeyPressedCode Confusion

private void body_KeyUp(object sender, HtmlElementEventArgs e) 
    { 
     if (e.KeyPressedCode == '.') 
     { 
      // Do something 
     } 
    } 

Согласно MSDN KeyPressedCode возвращает значение ASCII. То, что я получаю от точки останова, - «190», если я вхожу в «.». Однако. Это даже не указано в стандартной таблице ASCII. Очевидно, я мог бы просто проверить на 190, но я боюсь, что KeyPressedCode может возвращать разные значения в разных системах с разными кодовыми страницами, языками и т. Д.

Не могли бы вы объяснить мне, почему KeyPressedCode возвращает «190» вместо «46» и как я могу справиться с этой проблемой «безопасно»?

Интересно, что возвращаемое значение для '' (пробела) всегда правильно ('32'). Воспроизведение с помощью System.Text.Encoding.GetEncoding и разных кодовых страниц не решило проблему, однако у меня мало опыта работы с кодовыми страницами.

ответ

1

Просто дикая догадка, но вы проверили значения e.AltKeyPressed, e.CtrlKeyPressed и e.ShiftKeyPressed? Надеюсь, вы увидите, что я получаю ...

2

Возможно, вы использовали проводную клавиатуру, потому что код 190 ключей является кодом OEM-номера .. Если вы используете ноутбук, он будет вести себя так, как вы ожидали.