ContextMenuStrip теряет фокус от элемента в древовидном представлении, если щелкнуть по нему правой кнопкой мыши - PullRequest
2 голосов
/ 07 сентября 2010

У меня contextmenuStrip, связанный с древовидным представлением.

Например, теперь у меня есть четыре узла в древовидной структуре и выбран узел 4.

Поведение: ContextMenuStrip - Когда вы правщелкните на узле 2, этот узел будет выбран, и как только откроется полоса контекстного меню, фокус снова вернется к узлу 4.

При старом компоненте «Контекстное меню» эта функция работает нормально, то есть узел 2 имеетфокус до контекстного меню времени открыт.

Я хотел бы выбрать узел 2, пока открыто контекстное меню.И выбор / фокус должны вернуться к Узлу 4, когда контекстное меню закрыто.

Запросить пожалуйста совет.

Благодарность и наилучшие пожелания Сумма

1 Ответ

1 голос
/ 07 сентября 2010

Да, элемент управления TreeView довольно ненадежен, когда фокус изменяется во время выполнения одного из его событий. Это одна из причин, по которой он различает события BeforeXxxx и AfterXxxx. К сожалению, полоса контекстного меню показывается слишком рано. Решение состоит в том, чтобы отобразить контекстное меню самостоятельно, реализовав событие NodeMouseClick. Как это:

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
        if (e.Button == MouseButtons.Right) {
            treeView1.SelectedNode = e.Node;
            contextMenuStrip1.Show(treeView1, e.Location);
        }
    }

Я оставлю восстановление фокуса после вас. В этом нет особого смысла.

...