Нет, вы не можете объединить их. Вам придется самостоятельно продублировать функциональность, добавив соответствующие пункты меню и написав необходимый код в их Click
методах обработки событий.
Общие элементы управления предоставляют это меню по умолчанию. Если вы хотите переопределить его, вы можете сделать это, но нет встроенного условия для комбинирования ваших пользовательских элементов со встроенным меню. Некоторые воспользовались этим как функция , назначающая пустой ContextMenu
или ContextMenuStrip
элементу управления, чтобы предотвратить отображение стандартного меню (говорите о запутанном дизайне пользовательского интерфейса!).
В частности, для элемента управления TextBox
я настоятельно рекомендую оставить контекстное меню по умолчанию как есть, а не пытаться заново его создать. Есть много вариантов, которые он предлагает для таких вещей, как IME, которые очень трудно понять правильно. Если вы нацеливаете свое приложение на широкую публику, они очень оценят, что такая функциональность существует в вашем приложении, как и ожидалось.
Лучше всего размещать пользовательские функции где-то еще. Щелчок правой кнопкой мыши по общему элементу управления и ожидание просмотра списка пользовательских параметров довольно не интуитивно понятен. Большинство других приложений не работают именно по этой причине.
Если, несмотря на мои рекомендации об обратном, вы очень настаивали на том, чтобы заставить это работать, вы можете воспользоваться тем, что встроенное контекстное меню - это просто стандартное всплывающее меню Win32, которое отображается всеми общих элементов управления, и эти элементы управления отправляют своим родителям WM_INITMENUPOPUP
сообщение , когда всплывающее меню собирается стать активным.
Вооружившись этими знаниями, вы можете решить P / Invoke некоторых функций из Windows API и изменить это контекстное меню. В частности, функции AppendMenu
или SetMenuIteminfo
.
Но тогда вас ждет сюрприз. Оказывается, что собственный элемент управления Edit (представитель которого TextBox
является представителем) не отправляет WM_INITMENUPOPUP
сообщение ! Я не уверен насчет элемента управления TreeView
, и элемент управления DataGridView
не будет делать любого этого, потому что это пользовательский класс, написанный для WinForms. Он вообще не основан ни на одном из собственных элементов управления Win32, поэтому он не будет отправлять такие сообщения, которые вы можете обработать.