I want a right click to cause a treenode to become selected, how?

  • Thread starter Thread starter worzel
  • Start date Start date
W

worzel

Can't suss this out for the life of me, googling of no help either.

Okay, new to win forms; I have a treeview with several root nodes, each
having a single level of child nodes underneath. I also havea context
(popup) menu which, what I want, is for it to pop up with certain options
(menuItems) when a root treeNode is selected and different options when a
child node is selected. It is all working well except for one problem - if I
right click on a childNode I still get the context menu options for the
parent (vica versa too)

This happening becuase the right click on said child node does not cause it
to be selected, the parent node remains the selected node! But I do not want
people to have to first left click to select the child node and then do the
right click to bring up the context menu with the appropriate options - most
apps I seee don't force this as a requirement.

Assuming I explained that all well enough, anybody got any ideas on what I
need to be doing??

TIA.

Andy.
 
You need to change the selected node of the treeview before showing the
context menu. The following code should do the trick:

private void contextMenu1_Popup(object sender, System.EventArgs e)
{
this.treeView1.SelectedNode =
this.treeView1.GetNodeAt(this.treeView1.PointToClient(Control.MousePosition));
if (this.treeView1.SelectedNode != null)
{
this.contextMenu1.MenuItems.Clear();

this.contextMenu1.MenuItems.Add(this.treeView1.SelectedNode.Text);
}
}

HTH, Jakob.
 
You are a champion! Thanks for that - it was just what I needed.

I did find a half solution by using the mousedown handler and using e.x and
e.y business to get and preselect the node, had no idea about this
PointToClient stuff - much better.

Andy
 
Back
Top