华廷射击KeyDown事件进行了错误的键代码

华廷射击KeyDown事件进行了错误的键代码

问题描述:

如果你看一下在WatiN.Core.Element.cs的代码,你看到以下内容:华廷射击KeyDown事件进行了错误的键代码

private static NameValueCollection GetKeyCodeEventProperty(char character) 
{ 
    return new NameValueCollection 
       { 
        {"keyCode", ((int) character).ToString()}, 
        {"charCode", ((int) character).ToString()} 
       }; 
} 

这是用来模拟客户端事件的触发代码例如,在文本字段中自动输入文本时。在我看来,这段代码会产生错误的keyCodes。

假设我在文本框中输入了字母“v”。 (int)'v'返回118. 118是F7的keyCode,而不是“v”的keyCode,它是86.

果然,我的应用程序正在检测到F7已被命中。

这看起来简直是错误的。我在这里错过了什么 - 我不相信没有其他人会看到这个问题,如果我不是。

在此先感谢,

朱利安。

我认为这里发生了一些事情。调用((int)'[character]')返回该字符的十进制ASCII值。小写v为118大写字母V是86

Console.WriteLine("lowercase: " + ((int)'v').ToString()); 
Console.WriteLine("uppercase: " + ((int)'V').ToString()); 
Console.WriteLine("V in Keys Enumeration: " + ((int)System.Windows.Forms.Keys.V).ToString()); 

通过调用堆栈寻找WatiN.Core.Element.KeyPress它最终下来调用下面这行代码在方法SetValueWhenOnKeyPress在IEFireEventHandler的.cs。

var newValue = _ieElement.GetAttributeValue("value") + ((char) int.Parse(addChar)); 

addChar是键代码项GetKeyCodeEventProperty返回。 newValue是用来设置Element的值的,因此当你做类似myTextField.TypeText('v')的事情时,在你的文本框中输入小写字母v。

注意:WatiN 2.1代码进行了审查。