.NET Возможно ли иметь контекстное меню для элемента комбинированного списка? - PullRequest
3 голосов
/ 11 января 2010

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

Ответы [ 6 ]

2 голосов
/ 11 января 2010

Это возможно, но не легко. Раскрывающийся список ComboBox является нативным ListBox, который создается на лету. Чтобы получить дескриптор этого списка, вы должны отправить сообщение CB_GETCOMBOBOXINFO в событии DropDown. Проверьте мой ответ в этой теме , чтобы узнать, как это сделать.

Айсберг, который может потопить этот Титаник, состоит в том, что выпадающий список автоматически закрывается, как только теряет фокус. Что произойдет, как только вы отобразите контекстное меню. С этим ничего не поделаешь.

Рассмотрим другой подход, вы можете использовать реальный ListBox, который вы делаете видимым, когда пользователь щелкает глиф, который выглядит как стрелка рядом с TextBox.

1 голос
/ 11 января 2010

Как сказал Вим в своем посте, прямого способа сделать это не существует, поскольку нужные вам сообщения не запускаются.

В целом вы можете попробовать установить DropdownStyle=Simple; в комбинированном меню и уменьшите область прокрутки, чтобы отобразить одну строку:

http://img34.imageshack.us/img34/1695/49557147.jpg

Если назначить комбинированное контекстное меню, оно откроется, если щелкнуть правой кнопкой мыши область прокрутки,Вам, вероятно, придется выяснить, на какой предмет щелкнули правой кнопкой мыши.Но, как говорили другие, это не похоже на стандартный способ Windows или интуитивное использование.

Или как насчет модального диалога, который вы можете вызвать из контекстного меню Combo?В диалоговом окне у вас может быть список, из которого пользователь может выбрать, и кнопка «Удалить», чтобы удалить выбранные элементы.

1 голос
/ 11 января 2010

Не возможно легко. При раскрытии поля со списком сообщения о событиях при наведении или щелчке правой кнопкой мыши не отправляются.

Вы можете видеть это в случае использования Spy ++.

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

0 голосов
/ 24 августа 2013

Для тех, кто спрашивает "Почему?"или сказать, что они никогда не видели выпадающий список с контекстным меню;Посмотрите на выпадающий список избранного любого веб-браузера.Вы можете щелкнуть правой кнопкой мыши и удалить, изменить или перейти к записи в текущей вкладке, новой вкладке или новом окне.Я также не смог отобразить фактическое контекстное меню, поэтому я создал меню с небольшой формой без полей и вызвал:

Private Sub FavoritesBar_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles FavoritesBar.SelectedIndexChanged
    FavIndex = FavoritesBar.SelectedIndex 'FavIndex is declared as a public string.
    Dim Loc As Point = New Point(MousePosition)
    FavMenu.Location = Loc
    FavMenu.ShowDialog()
End Sub

С самодельным контекстным меню обязательно добавьте «me.close»конец каждого подпрограммы, а также событие me.mouseleave.

0 голосов
/ 11 января 2010

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

0 голосов
/ 11 января 2010

Поскольку MenuItem не имеет свойства ContextMenu, это не так просто, как со многими другими элементами управления. Вам, вероятно, потребуется зафиксировать событие правого клика, а затем расположить и отобразить контекстное меню вручную.

Два предостережения:

  • Список выпадающих списков закроется, когда список теряет фокус, поэтому может закрыться когда отображается контекстное меню оставляя пользователя неясным относительно того, что они нажали (не уверен на 100% это, так как я не написал код для проверки.)

  • Более важно, хотя я бы поспорил что это плохой выбор интерфейса, я не могу думать ни о каком реальном мире приложения, которые я использовал, которые имеют контекстные меню на пунктах меню, так что не будет очень открыты для конечный пользователь. Плюс контекстные меню должны быть только для быстрого доступа, они не должен быть единственным способом доступа функциональность. Вы собираетесь быть возможность выставить эти функции с помощью других средств, а также контекстного меню?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...