2017-02-27 6 views
1

私はフォームを持っていると私は、私はF1を押したときに、私のフォームを表示し、隠したい、私はグローバル低レベルのキーボードフックを使用して、このチュートリアルに従うしようとcのキーボードでフォームを隠す: https://www.codeproject.com/articles/19004/a-simple-c-global-low-level-keyboard-hookショーと#

を私は1倍フォームの皮を押してください私がもう一度押すと、すぐにフォームが表示されますが、動作しません。任意の助け

namespace MyForm 
{ 
    public partial class Form1 : MetroForm 
    {  
     public Form1() 
     { 
      InitializeComponent();     
     } 

     globalKeyboardHook gkh = new globalKeyboardHook(); 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      gkh.HookedKeys.Add(Keys.F1); 
      gkh.KeyDown += new KeyEventHandler(gkh_KeyDown); 

      gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);    
     } 

     void gkh_KeyUp(object sender, KeyEventArgs e) 
     { 
      this.Show(); 
      e.Handled = true;     
     } 

     void gkh_KeyDown(object sender, KeyEventArgs e) 
     { 
      this.Hide(); 
      e.Handled = true;  
     } 

     private void Form1_Closing(object sender, EventArgs e) 
     { 
      gkh.unhook(); 
     } 
    } 
} 

THX

答えて

0

あなたが、それは同時に両方のイベントがトリガされますので、ボタンを押すと同時に、ボタンを離すとされることの代わりにこの

public static bool flag = true; 
     public Form1() 
     { 
      InitializeComponent(); 

     } 
     globalKeyboardHook gkh = new globalKeyboardHook(); 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      gkh.HookedKeys.Add(Keys.F1); 
      gkh.KeyDown += new KeyEventHandler(gkh_KeyDown); 

     } 

     void gkh_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (flag) 
      { 
       this.Hide(); 
       flag = false; 
      } 
      else 
      { 
       this.Show(); 
       flag = true; 
      } 

      e.Handled = true; 
     } 

     private void Form1_Closing(object sender, EventArgs e) 
     { 
      gkh.unhook(); 
     } 
ような何かをしています

あなたはf1を押しているので、​​となる1つのイベントでそれを処理しなければなりません。また、フォームが非表示になっているかどうかを確認するフラグを追加してフォームが表示されたら非表示にします

+0

thxは完全に動作します –