Right click a node in treeview

D

Darren

In a treeview how do I select a node by right clicking it?

I have a context menu attached which has options that only work if a node
is selected.

I've used:

If MouseButtons = MouseButtons.Right Then
Dim node As TreeNode = TreeView1.GetNodeAt(e.X, e.Y)

' Update the context menu text here

End If

from here http://www.dotnet247.com/247reference/msgs/32/161260.aspx

but GetNodeAt doesn't exist on Compact Framework.

Any ideas?

Thanks

Darren
 
M

Mark Johnson

You must reacte to the ContextMenu Popup event
(full source of the (PC/Compact Project) can be downloaded at :

http://www.codeproject.com/useritems/NetDbExplorer.asp

Here to Method for Popup :

Mark Johnson, Berlin Germany
(e-mail address removed)

#region contextMenu_Popup
/// <summary>
/// <list type="table">
/// <item><description>Build the Context Menu accourding the branch of
the Tree</description></item>
/// </list>
/// <remarks>
/// <para>this works with NET Framework.Compact dispite the Documentation
(not mentioned for Compact) !</para>
/// </remarks>
/// </summary>
/// <param name="sender">Control where we are running</param>
/// <param name="e">.EventArgs sent (used to get ContextMenu)</param>
private void contextMenu_Popup(object sender, System.EventArgs e)
{
// This Method really does a lot of nothing, but that is better than
nothing.
// - it is up to you to do something usefull here
// - In another Program I collect the infomation needed to identify the
DataRow that
// belongs to the selected branch and store it for the Methods that are
called
// from one of the 20 Menu's that will show up after this Method is
finished. mj10777.de.eu
// - When you pick a menu, a MessageBox will show what has been collected
here.
System.Windows.Forms.ContextMenu t_contextMenu =
(System.Windows.Forms.ContextMenu) sender;
System.Text.RegularExpressions.Regex r1 = new
System.Text.RegularExpressions.Regex(" ");
System.Text.RegularExpressions.Regex r2 = new
System.Text.RegularExpressions.Regex(",");
String s_DataBase = "";
String s_Table = "";
String s_Field = "";
String s_Type = "";
String[] sa_Text1 = null;
String[] sa_Text2 = null;
// This is only neeed if you support more that one ContextMenu in this
Popup
if (t_contextMenu == contextMenuTreeViewDataSet)
{
TreeNode t_TreeNode = TreeViewDataSet.SelectedNode;
if (t_TreeNode != null) // Tree may be empty
{

//--------------------------------------------------------------------------
--
// Turn off all the Menus, we will only activat thos that are needed

//--------------------------------------------------------------------------
--
// .Visible is not supported b< NET Framework.Compact, more the pity.
menuItemTreeViewDataSet_01.Enabled = false;
menuItemTreeViewDataSet_02.Enabled = false;
menuItemTreeViewDataSet_03.Enabled = false;
menuItemTreeViewDataSet_S_01.Enabled = false;
menuItemTreeViewDataSet_04.Enabled = false;
menuItemTreeViewDataSet_0200.Enabled = false;
menuItemTreeViewDataSet_02000.Enabled = false;

//--------------------------------------------------------------------------
--
// Through the ImageIndex we know how the Branch string is formatted
// - that is why Note12.ico is used three times in imageListMainFrame
(8,9,10)

//--------------------------------------------------------------------------
--
if (t_TreeNode.SelectedImageIndex == 0) // DataConnection
{
// Do nothing
} // if (t_TreeNode.SelectedImageIndex == 0) // DataConnection
if ((t_TreeNode.SelectedImageIndex == 1) ||
(t_TreeNode.SelectedImageIndex == 2)) // DataBase
{
s_DataBase = t_TreeNode.Text.Trim();
sa_DataMessage[0] = sa_DataMessage[1]; // "a DataBase was selected\n-
";
sa_DataMessage[0] += s_DataBase+"\n";
// Only the DataBase Menu should be shown
menuItemTreeViewDataSet_01.Enabled = true;
} // if ((t_TreeNode.SelectedImageIndex == 1) ||
(t_TreeNode.SelectedImageIndex == 2)) // DataBase
if ((t_TreeNode.SelectedImageIndex == 5) ||
(t_TreeNode.SelectedImageIndex == 6)) // Table
{
s_DataBase = t_TreeNode.Parent.Parent.Text.Trim();
s_Table = t_TreeNode.Text.Trim();
// Only the DataBase and Table Menu should be shown
menuItemTreeViewDataSet_01.Enabled = true;
menuItemTreeViewDataSet_02.Enabled = true;
sa_DataMessage[0] = s_DataBase+"\n- ";
// Just to show off
sa_Text1 = r1.Split(t_TreeNode.Parent.Text);
int i_Nr = Convert.ToInt32(sa_Text1[0].Trim());
sa_DataMessage[0] += i_Nr.ToString()+" "+sa_Text1[1]+"\n";
sa_DataMessage[0] += sa_DataMessage[2]; // "a Table was selected\n- ";
sa_DataMessage[0] += s_Table+"\n";
} // if ((t_TreeNode.SelectedImageIndex == 5) ||
(t_TreeNode.SelectedImageIndex == 6)) // Table
if (t_TreeNode.SelectedImageIndex == 7) // Fields
{
s_DataBase = t_TreeNode.Parent.Parent.Parent.Parent.Text.Trim();
s_Table = t_TreeNode.Parent.Parent.Text.Trim();
s_Field = t_TreeNode.Text.Trim();
// Here it would be usefull to have a Child Methode to get the
DataType
// - but it does not exist (it seems)
// Only the DataBase,Table and Fields Menu should be shown
menuItemTreeViewDataSet_01.Enabled = true;
menuItemTreeViewDataSet_02.Enabled = true;
menuItemTreeViewDataSet_03.Enabled = true;
menuItemTreeViewDataSet_0200.Enabled = true;
sa_DataMessage[0] = s_DataBase+"\n- ";
// Just to show off
sa_Text1 = r1.Split(t_TreeNode.Parent.Parent.Parent.Text);
int i_Nr = Convert.ToInt32(sa_Text1[0].Trim());
sa_DataMessage[0] += i_Nr.ToString()+" "+sa_Text1[1]+"\n";
//---
sa_DataMessage[0] += s_Table+"\n- ";
sa_Text1 = r1.Split(t_TreeNode.Parent.Text);
sa_Text2 = r2.Split(sa_Text1[1]);
i_Nr = Convert.ToInt32(sa_Text1[0].Trim());
sa_DataMessage[0] += i_Nr.ToString()+" "+sa_Text2[0]+"\n- ";
i_Nr = Convert.ToInt32(sa_Text1[2].Trim());
sa_DataMessage[0] += i_Nr.ToString()+" "+sa_Text1[3]+"\n";
sa_DataMessage[0] += sa_DataMessage[3]; // "a Field was selected\n- ";
sa_DataMessage[0] += s_Field+"\n";
} // if (t_TreeNode.SelectedImageIndex == 7) // Fields
if (t_TreeNode.SelectedImageIndex == 10) // DataType
{
s_DataBase =
t_TreeNode.Parent.Parent.Parent.Parent.Parent.Text.Trim();
s_Table = t_TreeNode.Parent.Parent.Parent.Text.Trim();
s_Field = t_TreeNode.Parent.Text.Trim();
s_Type = t_TreeNode.Text.Trim();
// Only the DataBase,Table and Fields Menu should be shown
menuItemTreeViewDataSet_01.Enabled = true;
menuItemTreeViewDataSet_02.Enabled = true;
menuItemTreeViewDataSet_03.Enabled = true;
menuItemTreeViewDataSet_0200.Enabled = true;
menuItemTreeViewDataSet_02000.Enabled = true;
sa_DataMessage[0] = s_DataBase+"\n- ";
// Just to show off
sa_Text1 =
r1.Split(t_TreeNode.Parent.Parent.Parent.Parent.Text);
int i_Nr = Convert.ToInt32(sa_Text1[0].Trim());
sa_DataMessage[0] += i_Nr.ToString()+" "+sa_Text1[1]+"\n";
//---
sa_DataMessage[0] += s_Table+"\n- ";
sa_Text1 = r1.Split(t_TreeNode.Parent.Parent.Text);
sa_Text2 = r2.Split(sa_Text1[1]);
i_Nr = Convert.ToInt32(sa_Text1[0].Trim());
sa_DataMessage[0] += i_Nr.ToString()+" "+sa_Text2[0]+"\n- ";
i_Nr = Convert.ToInt32(sa_Text1[2].Trim());
sa_DataMessage[0] += i_Nr.ToString()+" "+sa_Text1[3]+"\n";
sa_DataMessage[0] += s_Field+"\n";
sa_DataMessage[0] += sa_DataMessage[4]; // "a Type was selected\n- ";
sa_DataMessage[0] += s_Type;
} // if (t_TreeNode.SelectedImageIndex == 10) // DataType
// This is where I would look for the DataRow and store it
} // if (t_TreeNode != null)
} // if (t_contextMenu == contextMenuTreeViewDataSet)
} // private void contextMenu_Popup(object sender, System.EventArgs e)
#endregion
 
D

Darren

Thanks for the reply but I don't understand C#, do you have some code in
VB.NET that lets me select a node when it is right clicked.

Thanks

Darren
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top