[急]键盘事件
 画面有两个按钮和一个文本编辑框和一个picturebox。 
 用到了键盘事件。 
 在里面处理回车键和→键。   
 如何做到以下: 
 1,不管焦点在那个控件上,按下回车都响应按钮2事件,即使焦点在按钮1上。 
 2,焦点在文本编辑框里按下→是编辑状态,除了文本框之外按下→响应按钮1事件。   
 现在存在问题: 
 1,按钮1有时获得焦点后,回车键就响应按钮1了。 
 2,当焦点在按钮1时,按下→时,焦点移动的按钮2。
------解决方案--------------------必须用hook了
------解决方案--------------------也可以用IMessageFilter   
 public class MsgFilter : IMessageFilter 
     { 
         public event KeyEventHandler OnKeyDown;   
         #region IMessageFilter Members   
         public bool PreFilterMessage(ref Message m) 
         { 
             if (m.Msg == 0x100) 
             { 
                 KeyEventArgs e = new KeyEventArgs((Keys)m.WParam); 
                 if (OnKeyDown != null) OnKeyDown(this, e); 
             }   
             return false; 
         }   
         #endregion 
     }   
 static class Program 
     { 
         ///  <summary>  
         /// The main entry point for the application. 
         ///  </summary>  
         [STAThread] 
         static void Main() 
         { 
             MsgFilter filter = new MsgFilter(); 
             Application.EnableVisualStyles(); 
             Application.SetCompatibleTextRenderingDefault(false); 
             Application.AddMessageFilter(filter); 
             Application.Run(new Form1(filter)); 
             Application.RemoveMessageFilter(filter); 
         } 
     }     
 private MsgFilter filter;   
         public Form1(MsgFilter filter) 
         { 
             InitializeComponent(); 
             this.filter = filter; 
             filter.OnKeyDown += new KeyEventHandler(filter_OnKeyDown); 
         }   
 void filter_OnKeyDown(object sender, KeyEventArgs e) 
         { 
             if (e.KeyData == Keys.Enter) MessageBox.Show( "Enter... "); 
         }
------解决方案--------------------protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg,System.Windows.Forms.Keys e)  
 { 
 	if(e==Keys.Enter) 
 	{ 
 		button3_Click(null ,null); 
 		return true; 
 	} 
 	if(e==Keys.Right &&!textBox1.Focused) 
 	{ 
 		button1_Click(null ,null); 
 		return true; 
 	} 
 	return false; 
 }//try