свойство enabled пункта контекстного меню для разных gridview

249
05 апреля 2018, 11:56

В форме есть grdControl1 и gridview1 и gridview2. Имеется контекстное меню с пунктом "Подробно". Хочу сделать чтобы при нажатии контекстного меню на gridview1 пункт "Подробно" был disable, а при нажатии на gridView2 - enable. В свойствах по умолчанию ставлю Enabled = false, а потом в методе загрузки гридов пишу

 if (gridControl1.FocusedView == gridView2)
        {
            подробноToolStripMenuItem.Enabled = true;
        }

Но это не срабатывает, все равно пункт "Подробно" остается disable и на gridview1(правильно) и на gridview2(неправильно) В чем может быть причина? Можно ли так сделать вообще?

Answer 1

а потом в методе загрузки гридов пишу ...

Судя по всему в методе загрузки ни одно отображение (view) не обладает фокусом. Соответственно, условие не выполняется и пункт меню остается отключенным. В любом случае код загрузки выполняется только раз и не обновляет состояние меню при каждом вызове.

Чтобы включать/отключать доступность пункта меню во время исполнения нужно обрабатывать событие ContextMenuStrip.Opening:

private void myContextMenuStrip_Opening(object sender, CancelEventArgs e)
    {
        //доступен если только сфокусирован gridView2
        подробноToolStripMenuItem.Enabled = (gridControl1.FocusedView == gridView2);
    }

Можно было бы также воспользоваться свойством ContextMenuStrip.SourceControl, но, полагаю, там в обоих случаях будет GridControl.

Вообще, компоненты DevExpress (насколько я понял, речь о них) предоставляют свои контекстные меню и свои способы их кастомизации. Посмотрите статью «Creating Custom Context Menus»

READ ALSO
Использование Lazy Loading

Использование Lazy Loading

Пробую использовать lazy loading entityframeworkСмотрю примеры с метанита

284
Сообщает ли MongoDB о расположении Master

Сообщает ли MongoDB о расположении Master

На сколько мне известно, запись ведется только через Master, а чтение возможно и из SlaveОднако встаёт такой вопрос: Если я подключился к Slave и знаю...

237
Медленная отрисовка DataGridView

Медленная отрисовка DataGridView

По событию загрузки формы выполняю следующий код

262