Как мне получить TreeNode, из которого вызывается контекстное меню? - PullRequest
3 голосов
/ 16 декабря 2011

У меня есть элемент управления TreeView с кучей TreeNodes.Каждый узел ContextMenu имеет разные элементы MenuIm в зависимости от его состояния.Поэтому в настоящее время я присоединяю каждый TreeNode к своему собственному ContextMenu.

TreeView tv = new TreeView();
TreeNode tn = New TreeNode();
tn.ContextMenu = GetContextMenu(state);
tv.Nodes.Add(tn);

Затем в событии click для MenuItem я пытаюсь получить TreeNode, к которому принадлежит ContextMenu.

MenuItem mi = (MenuItem)sender;
ContextMenu tm = mi.GetContextMenu();
var sc = tm.SourceControl;

проблема в том, что tm.SourceControl == null.Я заметил, что TreeNode не происходит от Control.Вот почему свойство SourceControl имеет значение null?Как я могу получить соответствующий объект TreeNode?Или даже объект TreeView?

1 Ответ

3 голосов
/ 16 декабря 2011

Я не уверен, что понимаю ваш вопрос.

Когда вы нажмете на TreeView, вы можете сделать это, чтобы получить выбранный узел и:

void tvMouseUp(object sender, MouseEventArgs e)
{
    if(e.Button == MouseButtons.Left)
    {
        // Select the clicked node
        tv.SelectedNode = tv.GetNodeAt(e.X, e.Y);

        if(tv.SelectedNode != null)
        {
            myContextMenuStrip.Show(tv, e.Location)
        }
    }
}
...