public bool ShowPopup(Control popupControl) { if (_popupForm == null || _popupForm.IsDisposed || _popupForm.Disposing) { if (_hostControl != null) { if (object.ReferenceEquals(_hostControl, popupControl)) { throw new InvalidOperationException(Resources.InvalidOperation_PopupSameControl); } FormMessageFilter msgFilter = new FormMessageFilter(_hostControl); msgFilter.HostClosed += delegate { this.ClosePopup(); }; _popupForm = new PopupForm(this.ServiceProvider); _popupForm.FormBorderStyle = this.PopupBorderStyle; _popupForm.FormClosing += delegate { this.PopupSize = _popupForm.Size; this.OnPopupClosing(EventArgs.Empty); }; _popupForm.Disposed += delegate { msgFilter.ReleaseHandle(); msgFilter = null; }; Control parentControl = _hostControl.Parent; Rectangle hostBounds = new Rectangle(new Point(0, 0), this.PopupSize); if (parentControl != null) { Rectangle hostControlBounds = parentControl.RectangleToScreen(_hostControl.Bounds); hostBounds.X = hostControlBounds.Left; hostBounds.Y = hostControlBounds.Bottom; } if (popupControl != null) { popupControl.Parent = _popupForm; popupControl.Dock = DockStyle.Fill; } _popupForm.Bounds = hostBounds; _popupForm.Show(); return(true); } } return(false); }
public bool ShowPopup(Control popupControl) { if (_popupForm == null || _popupForm.IsDisposed || _popupForm.Disposing) { if (_hostControl != null) { if (object.ReferenceEquals(_hostControl, popupControl)) { throw new InvalidOperationException(Resources.InvalidOperation_PopupSameControl); } FormMessageFilter msgFilter = new FormMessageFilter(_hostControl); msgFilter.HostClosed += delegate { this.ClosePopup(); }; _popupForm = new PopupForm(this.ServiceProvider); _popupForm.FormBorderStyle = this.PopupBorderStyle; _popupForm.FormClosing += delegate { this.PopupSize = _popupForm.Size; this.OnPopupClosing(EventArgs.Empty); }; _popupForm.Disposed += delegate { msgFilter.ReleaseHandle(); msgFilter = null; }; Control parentControl = _hostControl.Parent; Rectangle hostBounds = new Rectangle(new Point(0, 0), this.PopupSize); if (parentControl != null) { Rectangle hostControlBounds = parentControl.RectangleToScreen(_hostControl.Bounds); hostBounds.X = hostControlBounds.Left; hostBounds.Y = hostControlBounds.Bottom; } if (popupControl != null) { popupControl.Parent = _popupForm; popupControl.Dock = DockStyle.Fill; } _popupForm.Bounds = hostBounds; _popupForm.Show(); return true; } } return false; }