怎样在DateTimePicker的keypress事件中,回车实现年月日焦点转换 DateTimePicker得到焦点后,焦点落在年份上。要求按回车后,实现年->月->日->下一个控件 的依次焦点转换。请问keypress事件该怎么写?先谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 您需要首先从DateTimePicker继承得到一个类MyDateTimePicker,然后再Override MyDateTimePicker的ProcessCmdKey方法,在Form上使用MyDateTimePicker。以下提供简单的示例代码: class MyDateTimePicker : System.Windows.Forms.DateTimePicker { protected override bool IsInputKey(System.Windows.Forms.Keys keyData) { return base.IsInputKey(keyData); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == Keys.Enter) { SendKeys.Send("{RIGHT}"); return true; } else { return base.ProcessCmdKey(ref msg, keyData); } } } 谢谢wsw0515(wsw) !如果不用DateTimePicker继承的方法,通过判断当前选中的是年、月、日,来决定SendKeys.Send("{RIGHT}")或SendKeys.Send("{Tab}");是否可行呢?换句话说,如何判断当前焦点在DateTimePicker的年、月、日的那一个区域上? Mark,等下回来看,谢谢先(-_-....) private void dateTimePicker1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) SendKeys.Send("{RIGHT}"); }这样可以,已经测试了 楼上:还有日->下一个控件的焦点切换问题,需要先判断当前焦点在DateTimePicker的年、月、日的那一个区域上。怎样判断? 在窗口或DateTimePicker的父控件中添加如下的基类方法的重写:protected override bool ProcessKeyPreview(ref Message m){ if (this.ActiveControl is DateTimePicker && m.Msg == 0x100 && (int)m.WParam == 13) { m.WParam = (IntPtr)0x27; } return base.ProcessKeyPreview(ref m);} to hbxtlhx(平民百姓-自已动手,丰衣足食):谢谢!再请教:DateTimePicker 是放在panel1里面的,我该在哪里添加这段代码?(int)m.WParam == 13是回车吧?m.Msg == 0x100 和m.WParam = (IntPtr)0x27;又指什么? 你要放到Panel里,但是你要重写这个Panel把代码放到Panel的代码里,其实你也可以放到Form里,这样你不必继承一个Panel,因为你的“Form1”就是从Form继承下来的,所以把代码放到“Form1”就可以了。因为判断的是ActiveControl,只要ActiveControl能够是DateTimePicker就可以操作了。 如果你只写到Form上,那么代码这样改一下:protected override bool ProcessKeyPreview(ref Message m){ Control ctr = Control.FromHandle(m.HWnd); if (ctr is DateTimePicker && m.Msg == 0x100 && (int)m.WParam == 0xd) { m.WParam = (IntPtr)0x27; } return base.ProcessKeyPreview(ref m);} 谢谢hbxtlhx(平民百姓-自已动手,丰衣足食)!试过了,可以在年->月->日之间循环移动。但如何在焦点移到 日 上时,再按回车移到下一个控件(即:如何判断焦点已经移到 日 上),有办法吗? 怎么在Timer-Tick中写代码实现表更新后Listbox中的数据也更新 打开软件 就要启动定时器 有没有这样的软件或者系统? wpf 如何添加一个 右击 弹出式菜单 c#控件网站 System.Data.SqlClient.SqlException: ')' 附近有语法错误。 dataGridView 不好意思又要麻烦大家! Form的哪个属性可以禁止改变窗口大小? c#中的long类型对应vb6中的什么类型? TextBox 动态计算输入字符长度 为什么我的ArrayList输出有问题。
class MyDateTimePicker : System.Windows.Forms.DateTimePicker
{
protected override bool IsInputKey(System.Windows.Forms.Keys keyData)
{ return base.IsInputKey(keyData);
} protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter)
{
SendKeys.Send("{RIGHT}");
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
}
换句话说,如何判断当前焦点在DateTimePicker的年、月、日的那一个区域上?
{
if (e.KeyCode == Keys.Enter)
SendKeys.Send("{RIGHT}");
}这样可以,已经测试了
{
if (this.ActiveControl is DateTimePicker && m.Msg == 0x100 && (int)m.WParam == 13)
{
m.WParam = (IntPtr)0x27;
}
return base.ProcessKeyPreview(ref m);
}
谢谢!再请教:
DateTimePicker 是放在panel1里面的,我该在哪里添加这段代码?
(int)m.WParam == 13是回车吧?m.Msg == 0x100 和m.WParam = (IntPtr)0x27;又指什么?
{
Control ctr = Control.FromHandle(m.HWnd); if (ctr is DateTimePicker && m.Msg == 0x100 && (int)m.WParam == 0xd)
{
m.WParam = (IntPtr)0x27;
}
return base.ProcessKeyPreview(ref m);
}
试过了,可以在年->月->日之间循环移动。
但如何在焦点移到 日 上时,再按回车移到下一个控件(即:如何判断焦点已经移到 日 上),有办法吗?