2012-02-14 13 views
2

この質問は、this my questionに関連しています。今私は私のクラスでフォームを持っており、ユーザーがボタンをクリックするとフォームを表示(または非表示)します。それで大丈夫です。しかし、元のフォームを使って移動したり、元のフォームのどこかをクリックしたりすると、フォームを非表示にしたい。新しいフォームは元のフォームの後ろにあります。私はロストフォーカスや他のもののようなイベントを試みていましたが、それは助けにはなりませんでした。だから、私は自分のコントロールからチェックするトリックが必要だと思うが、パラレンフォーム(原型)や他のハックでクリックがあった場合。私はコードを置くことが最善であることを知っていますが、私は多くの行を持っていますので、私は一般的な方法で私を助け、私のアプリにapplicateしようとするなら、最善の方法があると思います。他のコントロールがフォーカスしているときにフォームを隠す

答えて

0

グローバルなマウスとキーボードhookで行うことができます。実際には、十分に文書化され、よく構造化された.NET APIに包まれています。CodePlex

ここに移動してダウンロードしてください。

_mouseListener = new MouseHookListener(new GlobalHooker()); 
    _mouseListener.MouseMove += HandleGlobalHookMouseMove; 
    _mouseListener.Start(); 

ここで重要なのは、あなただけではなく、あなたの窓の範囲内で、デスクトップ上のマウスの移動ANYWHERE MouseMoveイベントをいつでも受けることである。次に、グローバルマウスフックを設定します。

private void HandleAppHookMouseMove(object sender, MouseEventArgs e) 
{ 

     if (this.Bounds.Contains(e.Location)) 
     { 
       HandleEnter(); 
     } 
     else 
     { 
       HandleLeave(); 
     }   
    } 

MouseClickのいずれかを設定することもできます。この2つの組み合わせにより、マウスが原点の上を移動したり、マウスがクリックされたりしたときにいつでも決定することができます。試したLostFocusやその他のイベントとは異なり、フォーカスは関係ありません。

0

以下は役に立ちますか?

public partial class Form1 : Form 
{ 
    Form f2 = new Form2(); 
    public Form1() 
    { 
     InitializeComponent(); 
     f2.Show(); 
    } 

    private void Form1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (this.ClientRectangle.Contains(e.Location) && f2.Visible) { f2.Hide(); } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     f2.Visible = !f2.Visible ? true : false; 
    } 
} 
関連する問題