datagridview contextmenustrip: отображение только для выбранных строк?

У меня есть стандартное представление данных и контекстное меню. Моя проблема в том, что мне нужно показать эту контекстную полосу, когда пользователь нажимает правую кнопку мыши, но не в каждой строке! Только в выбранных мною рядах. Я пробовал это:

dataGridView1.Rows[1].ContextMenuStrip = contextMenuStrip1;

Но это не работает.


person Paweł Adamczyk    schedule 16.12.2012    source источник


Ответы (1)


Мне кажется, вы хотите открыть свой ContextMenuStrip, если ваш пользователь щелкнет правой кнопкой мыши заголовок вашего столбца DataGridView, который удовлетворяет некоторому условию.

Вкратце: используйте событие DataGridView MouseDown и в этом событии проверьте условия и, если они выполнены, вызовите метод Show вашего ContextMenuStrip.

Пример кода, на который вы можете сослаться:

private void dataGridView1_MouseDown(object sender, MouseEventArgs e) {
    if (e.Button == MouseButtons.Right) {
        var ht = dataGridView1.HitTest(e.X, e.Y);
        // Place your condition HERE !!!
        // Currently it allow right click on last column only
        if ((    ht.ColumnIndex == dataGridView1.Columns.Count - 1) 
             && (ht.Type == DataGridViewHitTestType.ColumnHeader)) {
            // This positions the menu at the mouse's location
            contextMenuStrip1.Show(MousePosition);
        }
    }
}
person Yusubov    schedule 16.12.2012
comment
Нет, я хочу открыть свой ContextMenuStrip, когда пользователь щелкает правой кнопкой мыши на представлении сетки данных, но не на каждой строке (ячейке), а только на строках (ячейках), которые я выбрал ранее. - person Paweł Adamczyk; 16.12.2012
comment
Как только вы определите свою логику в разделе условий оператора IF(), ОНА БУДЕТ РАБОТАТЬ! - person Yusubov; 16.12.2012
comment
Этот contextMenuStrip1.Show(MousePosition); это линия, которую я искал. Спасибо. - person Alejandro del Río; 23.01.2014