private void ListBoxOnDisposed(object sender, EventArgs eventArgs)
        {
            var clientRect = new global::UWinForms.System.Drawing.Rectangle(0, 0, Width, Height);
            var contains   = clientRect.Contains(PointToClient(MousePosition));

            if (!contains)
            {
                listBoxOpened = false;
            }
            else
            {
                listBoxOpened = !listBoxOpened;
            }

            listBox.MouseUp  -= ListBoxOnMouseUp;
            listBox.KeyDown  -= ListBoxOnKeyDown;
            listBox.Disposed -= ListBoxOnDisposed;

            listBox = null;

            OnDropDownClosed(EventArgs.Empty);
        }
示例#2
0
        private Control _ControlAt(Point mousePosition)
        {
            Control control = null;

            if (Contexts.Count > 0)
            {
                for (int i = 0; i < Contexts.Count; i++)
                {
                    var contextControl = Contexts[i];
                    var cRect          = new global::UWinForms.System.Drawing.Rectangle(contextControl.Location.X, contextControl.Location.Y, contextControl.Width, contextControl.Height);
                    if (cRect.Contains(mousePosition))
                    {
                        control = contextControl;
                        break;
                    }
                }
            }
            if (ModalForms.Count > 0)
            {
                if (control == null)
                {
                    var lastModalForm = ModalForms.Last();
                    var formRect      = new global::UWinForms.System.Drawing.Rectangle(lastModalForm.Location.X, lastModalForm.Location.Y, lastModalForm.Width, lastModalForm.Height);
                    if (formRect.Contains(mousePosition))
                    {
                        control = lastModalForm;
                    }
                }
            }
            else
            {
                if (control == null)
                {
                    for (int i = Forms.Count - 1; i >= 0; i--)
                    {
                        var form = Forms[i];
                        if (form.TopMost && form.Visible && form.Enabled)
                        {
                            var formRect = new global::UWinForms.System.Drawing.Rectangle(form.Location.X, form.Location.Y, form.Width, form.Height);
                            if (formRect.Contains(mousePosition))
                            {
                                control = form;
                                break;
                            }
                        }
                    }
                }

                if (control == null)
                {
                    for (int i = Forms.Count - 1; i >= 0; i--)
                    {
                        var form = Forms[i];
                        if (form.TopMost == false && form.Visible && form.Enabled)
                        {
                            var formRect = new global::UWinForms.System.Drawing.Rectangle(form.Location.X, form.Location.Y, form.Width, form.Height);
                            if (formRect.Contains(mousePosition))
                            {
                                control = form;
                                break;
                            }
                        }
                    }
                }
            }

            if (control != null)
            {
                control = FindControlAt(control, mousePosition);
            }

            return(control);
        }