- c++builder中让FORM响应组合键:
- 1.首先要设置form的keypreview==true,
- 如果一个Form上有Edit、Memo。它们都有OnKeyPress事件,那么当Form的KeyPreview=true 你按键时程序优先响应Form的OnKeyPress事件。WM_KEYDOWN,WM_KEYUP消息是先发送到主窗口的,如果主窗口没有响应,那么控件(也就是子窗口)才响应。
- 你可以做个实验。
- void fastcall Form1::Form1KeyPress(TObject *Sender,DWORD &key……)
- {
- if(Key ==VK_RETURN)
- ShowMessage("Form1KeyPress");
- }
- void fastcall Form1::Edit1KeyPress(TObject *Sender,DWORD &key……)
- {
- if(Key ==VK_RETURN)
- ShowMessage("Edit1KeyPress");
- }
- 然后分别把Form的KeyPreview设为true和false,然后将光标移动到Edit1,按回车键。看看结果有什么不同。
- 2.然后设定form的KeyPress(),KeyDown()等事件;
- 下面判断是否按下了Shift+Q;
- void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
- TShiftState Shift)
- {
- if(Key=='Q'&&Shift.Contains(ssShift))
- {
- ShowMessage("shit +q");
- }
- }
- c#中实现的方法是一样的;
- 如下:
- 需要将form的KeyPreview设true
- private void Form1_Load(object sender, System.EventArgs e)
- {
- this.KeyPreview=true;
- }
- private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
- {
- if((e.Alt)&&(e.KeyCode==System.Windows.Forms.Keys.S))
- {
- MessageBox.Show("");
- }
- }
如上就轻松搞定了。