private void mf_MouseDown()
 {
     if (this.Visible)
     {
         if (!this.RectangleToScreen(this.ClientRectangle).Contains(Cursor.Position))
         {
             this.Visible = false;
             Application.RemoveMessageFilter(mf);
             mf = null;
             this.DestroyHandle();
             this.Dispose();
         }
     }
 }
        private void mf_KeyUp(IntPtr target)
        {
            if (!target.Equals(IntPtr.Zero))
            {
                if (this.Visible)
                {
                    if (!IsTargetMine(target))
                    {
                        this.Visible = false;

                        Application.RemoveMessageFilter(mf);
                        mf = null;
                        this.Dispose();
                    }
                }
            }
        }
        /// <summary>
        /// Construction with mode current.
        /// </summary>
        /// <param name="_mode">Used to set focus button of this mode</param>
        public ChooseMode(Variables.Constants.Mode _mode)
        {
            InitializeComponent();
            // xem cách sử dụng user control và component nữa, còn nhiều cái
            // phải học đối với C# ở trong đó.....
            this.Return_Mode = _mode;
            SetFocusButton(_mode);

            if (mf == null)
            {
                mf = new MyFilter();
                Application.AddMessageFilter(mf);
            }

            mf.MouseDown += new MyFilter.LeftButtonDown(mf_MouseDown);
            mf.KeyUp     += new MyFilter.KeyPressUp(mf_KeyUp);
        }