ContextManuStripTool.show() неправильная позиция

Я пытаюсь научиться пользоваться 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 метод без успеха, что является правильным способом, чтобы получить мою позицию щелчка

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);
    }
  }
}
Другие вопросы по тегам