华廷射击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代码进行了审查。