让程序响应组合键(c++builder&c#)

  1.  c++builder中让FORM响应组合键:
  2. 1.首先要设置form的keypreview==true
  3. 如果一个Form上有Edit、Memo。它们都有OnKeyPress事件,那么当Form的KeyPreview=true   你按键时程序优先响应Form的OnKeyPress事件。WM_KEYDOWN,WM_KEYUP消息是先发送到主窗口的,如果主窗口没有响应,那么控件(也就是子窗口)才响应。   
  4.   你可以做个实验。   
  5.   void   fastcall   Form1::Form1KeyPress(TObject   *Sender,DWORD   &key……)   
  6.   {   
  7.       if(Key   ==VK_RETURN)   
  8.           ShowMessage("Form1KeyPress");   
  9.   }   
  10.   void   fastcall   Form1::Edit1KeyPress(TObject   *Sender,DWORD   &key……)   
  11.   {   
  12.       if(Key   ==VK_RETURN)   
  13.           ShowMessage("Edit1KeyPress");   
  14.   }   
  15.   然后分别把Form的KeyPreview设为truefalse,然后将光标移动到Edit1,按回车键。看看结果有什么不同。
  16. 2.然后设定form的KeyPress(),KeyDown()等事件;
  17. 下面判断是否按下了Shift+Q;
  18. void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
  19.       TShiftState Shift)
  20. {
  21. if(Key=='Q'&&Shift.Contains(ssShift))
  22. {
  23. ShowMessage("shit +q");
  24. }
  25. }

 

 

  1. c#中实现的方法是一样的;
  2. 如下:
  3. 需要将form的KeyPreview设true   
  4.   private   void   Form1_Load(object   sender,   System.EventArgs   e)   
  5.   {   
  6.   this.KeyPreview=true;   
  7.   }
  8. private   void   Form1_KeyDown(object   sender,   System.Windows.Forms.KeyEventArgs   e)   
  9.   {   
  10.   if((e.Alt)&&(e.KeyCode==System.Windows.Forms.Keys.S))   
  11.   {   
  12.   MessageBox.Show("");   
  13.   }   
  14.   }

如上就轻松搞定了。

你可能感兴趣的:(c,C#,C++Builder)