【问题标题】:ContextManuStripTool.show() position is wrongContextManuStripTool.show() 位置错误
【发布时间】:2016-02-29 23:54:03
【问题描述】:

我正在学习如何使用ContextMenuStrip

使用此代码时:

private void DG_dataGridView_MouseClick(object sender, MouseEventArgs e)
{
        if (e.Button == MouseButtons.Right)
        {
            var hitTest = DG_dataGridView.HitTest(e.X, e.Y);

            if (hitTest.Type == DataGridViewHitTestType.ColumnHeader)//currentMouseOverRow >= 0)
            {
                string colName = DG_dataGridView.Columns[hitTest.ColumnIndex].Name;
                GlobalParam.Insatance.ClickData = new RightClickData(hitTest, colName);

                RightClickToolStrip.Show(DG_dataGridView, new Point(e.X, e.Y));
            }
        }
}

我看到菜单在正确的位置弹出

但是当我使用此代码时:

    private void DG_dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {

            var hitTest = DG_dataGridView.HitTest(e.Location.X, e.Location.Y);

            string colName = DG_dataGridView.Columns[e.ColumnIndex].Name;
            GlobalParam.Insatance.CustomMouseGridClickData = new CustomMouseOnGridClickData(e, hitTest.Type, colName);


            RightClickToolStrip.Show(DG_dataGridView, new Point(e.X, e.Y));

        }

    }

我看到DataGridView左上角弹出菜单

我知道这是由于DataGridViewCellMouseEventArgs的操作 我试图在toolStrip.Show 方法中设置其他控件但没有成功 获得点击位置的正确方法是什么

【问题讨论】:

    标签: c# winforms datagridview mouseevent contextmenustrip


    【解决方案1】:

    使用 ColumnHeaderMouseClick 事件,您不必使用该 HitTest 方法测试列是否被点击。另外,我认为坐标是相对于被点击的列的,所以你可以尝试使用 GetColumnDisplayRectangle 函数来偏移它的属性:

    void DG_dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
      if (e.Button == MouseButtons.Right) {
        if (e.ColumnIndex > -1) {
          Rectangle r = DG_dataGridView.GetColumnDisplayRectangle(e.ColumnIndex, true);
          RightClickToolStrip.Show(DG_dataGridView, r.Left + e.X, r.Top + e.Y);
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多