Не можете установить положение контекстного меню? - PullRequest
9 голосов
/ 13 сентября 2011

Я пытаюсь открыть contextmenustrip в том месте, где щелкнул правой кнопкой мыши, но оно всегда отображается в левом верхнем углу экрана.

Вот код, который я использовал:

private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        contextMenuStrip1.Show(new Point(e.X,e.Y));
        doss.getdossier(connection.conn, Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value));
    }
}

Ответы [ 2 ]

11 голосов
/ 13 сентября 2011
if (e.Button == MouseButtons.Right)
{
    contextMenuStrip1.Show(Cursor.Position);
}

причина, по которой он не отображается, в том, что вы используете e.X и e.Y для значений. Они не являются фактическим местоположением на экране. Они - местоположение мыши внутри сетки данных. Допустим, вы щелкнули первую ячейку первого ряда, которая будет в левом верхнем углу этого компонента. e.X и e.Y - местоположения мыши внутри компонента.

2 голосов
/ 13 сентября 2011

при условии, что вы в Windows Forms, попробуйте это:

if (e.Button == MouseButtons.Right)
{
  Control control = (Control) sender;

  // Calculate the startPoint by using the PointToScreen 
  // method.

  var startPoint = control.PointToScreen(new Point(e.X, e.Y));
  contextMenuStrip1.Show(startPoint);
  ...
  ...
...