Assuming you have a TreeNode called myNode then the parent child relationship is simple:
TreeNode parent = myNode.Parent;
TreeNode grandParent = parent == null ? null : parent.Parent;
What kind of value are you talking about?
"Lets say i have a node named school and then that node has child nodes of class rooms and the classrooms has child nodes of desks.
In other words : School : class room 1 : desk 1
: desk 2
: class room 2 : desk 1
: desk 2
: class room 3 : desk 1
: desk 2
so lets say i select desk 2 of class room 3
I want to have the node values of desk 2 class room 3 and school
'Thanks"
The problem I have is that a TreeNode doesn't have a Value - it has a Text field, which would give you "desk 2" from both
School:class room 1:desk 2
and
School:class room 2:desk 2
. But what you want sound like you have a Desk object which is associated with each of the desk nodes and which you want to retrieve via the tree. If so, then that is easy: each TreeNode has a Tag property which contains an object. If you assign your Desk instance to the appropriate TreeNode, you can retrieve it:
Desk desk = myNode.Tag as Desk;
if (desk != null)
{
...
}