Различия между Oracle JDK и OpenJDK

Для параметра 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;
        }
     }
 }
628
задан Thorbjørn Ravn Andersen 31 January 2019 в 23:33
поделиться

1 ответ

Мое понимание - то, что 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?" статьи.

0
ответ дан 22 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: