Рекурсия:
private void button1_Click(object sender, EventArgs e)
{
// создаем меню
var menu = new MenuStrip();
menu.Items.Add("Меню");
// перебираем узлы
foreach (TreeNode n in treeView1.Nodes)
{
// создаем элемент меню
var menuItem = new ToolStripMenuItem();
menuItem.Text = n.Text;
// перебирем детей
ConvertNodeToMenu(menuItem, n);
// добавляем элемент в меню
((ToolStripMenuItem)menu.Items[0]).DropDownItems.Add(menuItem);
}
// добавляем меню на форму
this.Controls.Add(menu);
}
private void ConvertNodeToMenu(ToolStripMenuItem menuParent, TreeNode node)
{
foreach (TreeNode n in node.Nodes)
{
// создаем элемент меню
var menuItem = new ToolStripMenuItem();
menuItem.Text = n.Text;
// перебираем детей
ConvertNodeToMenu(menuItem, n);
// добавляем элемент в меню
menuParent.DropDownItems.Add(menuItem);
}
}
Вариант с
LINQ:
private void button1_Click(object sender, EventArgs e)
{
// создаем меню
var menu = new MenuStrip();
menu.Items.Add("Меню");
// берем первый элемент меню
var menuItem = (ToolStripMenuItem)menu.Items[0];
// получаем узлы и добавляем в меню
menuItem.DropDownItems.AddRange
(
treeView1.Nodes.Cast<TreeNode>().Select
(
n => new ToolStripMenuItem(n.Text, null, ConvertNodeToMenu(n))
).ToArray()
);
// добавляем меню на форму
this.Controls.Add(menu);
}
private ToolStripMenuItem[] ConvertNodeToMenu(TreeNode node)
{
return node.Nodes.Cast<TreeNode>().Select
(
n => new ToolStripMenuItem(n.Text, null, ConvertNodeToMenu(n))
).ToArray();
}