ContextMenu
: Проблема заключается в том, что параметр sender
указывает на пункт в контекстном меню, которое было нажато, а не на контекстное меню.
Это простое исправление, потому что каждый MenuItem
предоставляет метод GetContextMenu
, который расскажет вам, какой ContextMenu
содержит этот пункт меню.
Измените свой код на следующее:
private void MenuViewDetails_Click(object sender, EventArgs e)
{
// Try to cast the sender to a MenuItem
MenuItem menuItem = sender as MenuItem;
if (menuItem != null)
{
// Retrieve the ContextMenu that contains this MenuItem
ContextMenu menu = menuItem.GetContextMenu();
// Get the control that is displaying this context menu
Control sourceControl = menu.SourceControl;
}
}
ContextMenuStrip
: Это немного изменит ситуацию, если вы используете ContextMenuStrip
вместо ContextMenu
, Два элемента управления не связаны друг с другом, и экземпляр одного не может быть передан экземпляру другого.
Как и прежде, элемент , который был нажат, все еще возвращен в параметре sender
, поэтому вам нужно будет определить ContextMenuStrip
, которому принадлежит этот отдельный пункт меню. Вы делаете это с помощью свойства Owner
. Наконец, вы будете использовать свойство SourceControl
, чтобы определить, какой элемент управления отображает контекстное меню.
Измените свой код следующим образом:
private void MenuViewDetails_Click(object sender, EventArgs e)
{
// Try to cast the sender to a ToolStripItem
ToolStripItem menuItem = sender as ToolStripItem;
if (menuItem != null)
{
// Retrieve the ContextMenuStrip that owns this ToolStripItem
ContextMenuStrip owner = menuItem.Owner as ContextMenuStrip;
if (owner != null)
{
// Get the control that is displaying this context menu
Control sourceControl = owner.SourceControl;
}
}
}
Мое понимание - то, что Oracle, JDK не может использоваться в производстве, поэтому я не могу по закону использовать его (не платя) для веб-приложения, которое я создаю для своей компании. Я должен использовать OpenJDK. Исправьте меня, если я неправ! От эта статья .
, Запускающаяся с Java 11, JDK Oracle ограничивается средами разработки и тестовыми средами. JDKs Oracle может только использоваться в производстве при покупке коммерческой поддержки. Вместо этого Oracle обеспечит сборки Java на основе OpenJDK бесплатно, который может использоваться в производстве. Но для официальной Oracle JDK реальная дорожная карта будет похожа на это:
ОБНОВЛЕНИЕ: я неправ. Я могу использовать Oracle JDK бесплатно, но не получу обновления системы защиты после 6 mos, и мы должны будем принять риск. Посмотрите на вышеупомянутый связанный раздел "What does the new release train mean to my company?" статьи.