GridControl右键弹出PopupMenu菜单

 方法一:

private void gridControl_MouseUp(object sender, MouseEventArgs e)
        {
            try
            {
                GridHitInfo info = gvEmployee.CalcHitInfo(e.Location);
                if (e.Button == MouseButtons.Right && info.InRowCell)
                {
                    popupMenu.ShowPopup(gridControl.PointToScreen(e.Location));
                }
            }
            catch (Exception ex)
            {

                ShowFormHelper.Error(ex);
            }
        }

方法二:

private void gridControl_MouseUp(object sender, MouseEventArgs e)
        {
            try
            {
                GridHitInfo info = gvEmployee.CalcHitInfo(e.Location);
                if (e.Button == MouseButtons.Right && info.InRowCell)
                {
                    popupMenu.ShowPopup(Control.MousePosition);
                }
            }
            catch (Exception ex)
            {

                ShowFormHelper.Error(ex);
            }
        }

 方法一和方法二的区别在于,PopupMenu控件ShowPopup()方法中的参数不同。

方法二中使用Control.MousePosition,虽然说能够弹出右键菜单,但是存在的问题是:

如果你右键菜单有很多项,或者加载菜单内容需要一些时间的时候,操作人员在选择数据的位置鼠标右键点击了一下,然后快速移动了鼠标,由于点击的时候右键菜单还在加载中,而鼠标乱移动后才加载完。导致最后右键菜单显示的位置不是鼠标点击所在的位置。

方法一则会显示在鼠标点击的那个位置的右下方弹出菜单。

由于很多控件都需要这个右键菜单,则可以封装一个弹出菜单的方法

        /// <summary>
        /// 设置控件点击位置弹出右键菜单
        /// </summary>
        /// <param name="controls"></param>
        /// <param name="menu"></param>
        /// <param name="e"></param>
        public void SetPopupPosition(Control controls, PopupMenu menu, MouseEventArgs e)
        {
            menu.ShowPopup(controls.PointToScreen(e.Location));
        }
发布了36 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_35351282/article/details/87872682