我要写一个windows CE 程序,需要enter键模拟tab 键的功能,我尝试了很多方法,但一直没有找到理想的方法。方法一:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.ToString() == "Return")
{
SendKeys.Send("{TAB}");
}
}
但是这种方法问题是在文本框中实现焦点切换还可以,遇到button按钮就不灵了,不知道为什么
方法二:在方法一的基础之上,对每个按钮添加响应事件
private void button1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.ToString() == "Return")
{
MessageBox.Show("button1_KeyDown 中执行!");
SendKeys.Send("{TAB}");
}
} private void button2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.ToString() == "Return")
{
MessageBox.Show("button2_KeyDown 中执行!");
SendKeys.Send("{TAB}");
}
} private void button3_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.ToString() == "Return")
{
MessageBox.Show("button3_KeyDown 中执行!");
SendKeys.Send("{TAB}");
}
}
问题:这种方法太麻烦,我程序中友很多控件,每个按钮得添加一次类似代码,工作量大,程序执行效率低。
方法三:
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter && (this.ActiveControl is TextBox || this.ActiveControl is Button || this.ActiveControl is ComboBox))
{
keyData = Keys.Tab;
}
return base.ProcessDialogKey(keyData);
} 这种方法在windows xp 环境下面可以很好运行,但是在windows CE 下面提示: error CS0115: no suitable method found to override。请高手给出方法啊,在线坐等。
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.ToString() == "Return")
{
SendKeys.Send("{TAB}");
}
}
但是这种方法问题是在文本框中实现焦点切换还可以,遇到button按钮就不灵了,不知道为什么
方法二:在方法一的基础之上,对每个按钮添加响应事件
private void button1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.ToString() == "Return")
{
MessageBox.Show("button1_KeyDown 中执行!");
SendKeys.Send("{TAB}");
}
} private void button2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.ToString() == "Return")
{
MessageBox.Show("button2_KeyDown 中执行!");
SendKeys.Send("{TAB}");
}
} private void button3_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.ToString() == "Return")
{
MessageBox.Show("button3_KeyDown 中执行!");
SendKeys.Send("{TAB}");
}
}
问题:这种方法太麻烦,我程序中友很多控件,每个按钮得添加一次类似代码,工作量大,程序执行效率低。
方法三:
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter && (this.ActiveControl is TextBox || this.ActiveControl is Button || this.ActiveControl is ComboBox))
{
keyData = Keys.Tab;
}
return base.ProcessDialogKey(keyData);
} 这种方法在windows xp 环境下面可以很好运行,但是在windows CE 下面提示: error CS0115: no suitable method found to override。请高手给出方法啊,在线坐等。
解决方案 »
- 小菜鸟问题---整型变量初始化的问题
- datagridview中使用rowfilter出现的神奇现象
- 如何学习C#,学习C#的步骤.很详细
- 急求,关于数组越界问题 在线在线急急急~
- 求一个session问题,,急急,,谢谢,只有10分了,
- 有熟悉UML的吗,我搞不清楚直线加开放箭头到底是个啥意思?
- 在Dreamweaver如何实现代码文件分离?
- 为什么socket在局域网内可以,在广域网就不行?
- 在c sharp中当打印时,如何隐藏掉,当前打印第x页的那个form呢? thanks
- ***请教!关于MessageBox控件事件捕获
- 服务器控件dropdowlist、gridview,然后用ajax 控制 onclick 事件,请问。。。
- 关于日期计算(在线等,马上结贴。)
{
if (e.KeyCode.ToString() == "Return")
{
MessageBox.Show((sender as Button).Name + "_KeyDown 中执行!");
SendKeys.Send("{TAB}");
}
}