作为一个问题的解决方法,我想我必须处理KeyDown事件以获取用户实际键入的可打印字符。什么,如果有的话,可打印的字符根据给定的System.Windows.Forms.KeyEventArgs中的值做了一个用户类型?
KeyDown为我提供了一个KeyEventArgs对象,其中包含KeyCode,KeyData,KeyValue,Modifiers,Alt,Shift和Control。
我的第一次尝试只是将KeyCode作为ASCII代码,但我的键盘上的KeyCode是46,一个句点(“。”),所以我最终打印了一段时间,当用户键入删除键时。所以,我知道我的逻辑是不够的。 (对于那些好奇的人,问题是我在DataGridView的控件集合中有自己的组合框,并且某种程度上我键入的某些字符不会产生KeyPress和TextChanged组合框事件,这些字母包括Q,$,%, ....
此代码将重现该问题。生成表单应用程序,并替换此代码构造函数。运行它,尝试输入字母Q到两个comboxes。
public partial class Form1 : Form
{
ComboBox cmbInGrid;
ComboBox cmbNotInGrid;
DataGridView grid;
public Form1()
{
InitializeComponent();
grid = new DataGridView();
cmbInGrid = new ComboBox();
cmbNotInGrid = new ComboBox();
cmbInGrid.Items.Add("a");
cmbInGrid.Items.Add("b");
cmbNotInGrid.Items.Add("c");
cmbNotInGrid.Items.Add("d");
this.Controls.Add(cmbNotInGrid);
this.Controls.Add(grid);
grid.Location = new Point(0, 100);
this.grid.Controls.Add(cmbInGrid);
}
在一个简单的应用程序的简单组合框给我KeyPress事件。我怀疑DataGridView正在拦截这些消息。它不知道我把它放在Control系列中的这些外星人孩子。 – 2008-10-13 20:02:53
感叹,KeyConvert需要VS 2008,3.0/3.5框架... – 2008-10-13 20:05:31
相似的行为:http://bytes.com/forum/thread548399.html – 2008-10-13 20:16:32