2012-01-17 8 views
0

私は、マウスのEnterとMouse Leaveでその中にドッキングされているいくつかのコントロールの可視性を変更するPanelを持っています。"子"コントロールのフォーカスを停止しますか?

問題パネル上のコントロール上にマウスカーソルを移動すると、そのマウスカーソルがその個別コントロールに移動するため、表示されなくなります。

パネル内の各コントロールに対してこれらの2つのイベントをコーディングしなくても、この作業を行う方法はありますか?

乾杯:

+0

[パネルがフォーカスしていない](http://stackoverflow.com/questions/3562235/panel-not-getting-focus) –

答えて

1

興味深い問題です。 MouseEnterまたはMouseLeaveにConsole.WriteLineを配置すると、マウスがコントロール上を移動するとマウスがパネル上に戻るようになり、コントロールを隠すコントロールを表示します。

あなたのリクエストを達成する方法を理解した唯一の方法は、MouseEnterイベントとMouseLeaveイベントを削除することでした。次に、パネルを含むフォームにMouseMoveイベントを追加しました。また、MouseMoveイベントをパネルに追加しました。両方のイベントは、パネルの上にあるかどうかを判断するためにマウスの座標をチェックするルーチンを呼び出します。 MouseCheckルーチンがtrueを返し、コントロールを表示していない場合は非表示にします。以下のサンプルはC#ですが、私はあなたがそのアイデアをつかむことができると確信しています。

private bool MouseCheck(Control ctl, Point point) 
    { 
     bool blnRet = false; 

     if (point.X < ctl.Left) 
     { 
      blnRet = false; 
     } 
     else if (point.X > ctl.Left + ctl.Width) 
     { 
      blnRet = false; 
     } 
     else if (point.Y < ctl.Top) 
     { 
      blnRet = false; 
     } 
     else if (point.Y > ctl.Top + ctl.Height) 
     { 
      blnRet = false; 
     } 
     else 
     { 
      blnRet = true; 
     } 

     return blnRet; 
    }