editBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SubItemEditOver);......private void SubItemEditOver(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
switch ((int)e.KeyChar)
{
case 13:
e.Handled = true;
break; case 27:
currentListViewItem.SubItems[subItemSelectedIndex].Text = editBox.Text;
editBox.Hide();
e.Handled = true;
break; default:
break;
} }==
代码如上:
我在TextBox上(这里的editbox 是 textbox), 自己添加了处理的事件, 当按下Enter/ESC/F1-F12,都没有进入到SubItemEditOver里面来.但a-Z, 0-9 都可以进来.
这个控件是显示在ListView中的(我的目的是点击一个item,可以编辑它的内容)
同时,放listview的窗体默认按ESC 关闭这个窗体,enter键是执行Ok按键中的操作.注:这个窗体,实际上是mmc中的一个Dialog,做过mmc程序的兄弟,应该知道.请问大家,为什么在keypress中抓不到enter和esc, 难道是mmc的bug?
{
switch ((int)e.KeyChar)
{
case 13:
e.Handled = true;
break; case 27:
currentListViewItem.SubItems[subItemSelectedIndex].Text = editBox.Text;
editBox.Hide();
e.Handled = true;
break; default:
break;
} }==
代码如上:
我在TextBox上(这里的editbox 是 textbox), 自己添加了处理的事件, 当按下Enter/ESC/F1-F12,都没有进入到SubItemEditOver里面来.但a-Z, 0-9 都可以进来.
这个控件是显示在ListView中的(我的目的是点击一个item,可以编辑它的内容)
同时,放listview的窗体默认按ESC 关闭这个窗体,enter键是执行Ok按键中的操作.注:这个窗体,实际上是mmc中的一个Dialog,做过mmc程序的兄弟,应该知道.请问大家,为什么在keypress中抓不到enter和esc, 难道是mmc的bug?
麻烦告知MMC是什么呀?
大家可以自己试试.
protected override void WndProc(ref Message m)
{
base.WndProc (ref m);
if (m.Msg == win32.WM_PAINT)
{
}
else if (m.Msg == win32.WM_HSCROLL || m.Msg == win32.WM_VSCROLL)
{
}
else if (m.Msg == win32.WM_LBUTTONDOWN
|| m.Msg == win32.WM_RBUTTONDOWN
|| m.Msg == win32.WM_LBUTTONDBLCLK
)
{
}
else if (m.Msg == win32.WM_MOUSEMOVE )
{
}
}
类似这样处理。
public class win32
{
public const int WM_MOUSEMOVE = 0x0200;
public const int WM_LBUTTONDOWN = 0x0201;
public const int WM_LBUTTONUP = 0x0202;
public const int WM_RBUTTONDOWN = 0x0204;
public const int WM_LBUTTONDBLCLK = 0x0203;public const int WM_MOUSELEAVE = 0x02A3;
public const int WM_PAINT = 0x000F;
public const int WM_ERASEBKGND = 0x0014;
public const int WM_PRINT = 0x0317; //const int EN_HSCROLL = 0x0601;
//const int EN_VSCROLL = 0x0602; public const int WM_HSCROLL = 0x0114;
public const int WM_VSCROLL = 0x0115;
public const int EM_GETSEL = 0x00B0;
public const int EM_LINEINDEX = 0x00BB;
public const int EM_LINEFROMCHAR = 0x00C9; public const int EM_POSFROMCHAR = 0x00D6;
}
当然,你可以把PostMessage也定义进去。
{
MessageBox.Show(e.KeyCode.ToString()+" "+e.KeyValue.ToString()+" ");
}result:
Enter 13
AcceptsReturn = true
就可以在KeyDown/KeyUp中抓到Enter了.
但非常可惜,还是抓不住ESC 键, 因为没有对应的 AcceptsEsc 属性,哈. 一按ESC, 窗体就自动关闭了(设置了CancelButton), 没办法.楼上的兄弟提到了MESSAGE,俺不是很会......
继续奋斗中.
在ProcessCmdKey中,有msg 和 keyData两个参数.
在这个debug, 发现按ESC是可以进来的.
但是,我处理完之后,return false. 窗体的ESC还是触发了(即窗体还是关闭了) 哪位大大有更好的想法,请指教.谢谢!
ProcessCmdKey 中Return true; 就可以了.
我是直接 return base.ProcessCmdKey(ref msg, keyData);谢谢大家的帮助.
谁有操作message的代码,可以分享一下子么?谢谢1