我有3个文件夹,其中包含一堆子文件夹和文件。我需要创建一个ContextMenuStrip,所有的文件夹和文件作为ToolStripMenuItems(作为一个树层次结构)。我知道如何硬编码它:
public class CustomApplicationContext : ApplicationContext
{
private NotifyIcon trayIcon;
private ContextMenuStrip contextMenuStrip = new ContextMenuStrip();
ToolStripMenuItem option1 = new ToolStripMenuItem("Option 1");
ToolStripMenuItem option1a = new ToolStripMenuItem("Option 1a");
ToolStripMenuItem option1b = new ToolStripMenuItem("Option 1b");
ToolStripMenuItem option1c = new ToolStripMenuItem("Option 1c");
ToolStripMenuItem option1ca = new ToolStripMenuItem("Option 1ca");
ToolStripMenuItem option2 = new ToolStripMenuItem("Option 2");
ToolStripMenuItem option3 = new ToolStripMenuItem("Option 3");
ToolStripMenuItem option4 = new ToolStripMenuItem("Option 4");
public CustomApplicationContext()
{
contextMenuStrip.Items.AddRange(new ToolStripItem[]
{
this.option1,
this.option2,
this.option3,
this.option4
});
this.option1.DropDownItems.AddRange(new ToolStripItem[]
{
this.option1a,
this.option1b,
this.option1c
});
this.option1c.DropDownItems.AddRange(new ToolStripItem[]
{
this.option1ca
});
trayIcon = new NotifyIcon()
{
Icon = Resources.AppIcon,
ContextMenuStrip = contextMenuStrip,
Visible = true
};
}
}
然而,我想让它更动态,所以如果在其中一个文件夹内的东西改变,它也将动态改变。
我怎么能做到呢?
1条答案
按热度按时间zbsbpyhn1#
它可以通过递归方法来完成,该方法递归地遍历目录树。
由于我们必须能够将菜单项添加到
ContextMenuStrip.Items
以及ToolStripMenuItem.DropDownItems
,因此我们将ToolStripItemCollection
传递给该方法。我们使用
baseDir
作为包含基目录的DirectoryInfo
创建如下菜单结构。如果要重复填充上下文菜单,请在添加菜单项之前调用
contextMenuStrip.Items.Clear();
。