如何在动态创建的contextmenustrip项目中控制子菜单项?

时间:2013-06-14 13:12:28

标签: c# collections dynamically-generated contextmenustrip

我要完成这项任务: 有一个contextmenustrip,其中一个分支中有3个静态项(通过设计器创建),之后会有动态创建的项(链接到硬盘上一个文件夹的子文件夹)。 这是我用来创建项目的代码的一部分:

    private void listBox1_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right && listBox1.SelectedIndex != -1)
        {
            string pathDatosString = Path.Combine(PMVars.MainPath + clientsbox2.SelectedItem.ToString() + @"\" + listBox1.SelectedItem.ToString() + @"\01-Datos");

                int count = ((contextMenuStrip1.Items[2] as ToolStripMenuItem).DropDownItems[2] as ToolStripMenuItem).DropDownItems.Count;
                //MessageBox.Show(count.ToString());
                if (count > 3)
                {
                    for (int i = 3;i < count;i++)
                    {
                        ((contextMenuStrip1.Items[2] as ToolStripMenuItem).DropDownItems[2] as ToolStripMenuItem).DropDownItems.RemoveAt(i);
                    }

                }
            if (Directory.Exists(pathDatosString))
            {
                // This path is a directory
                foreach (string diritem in Directory.GetDirectories(pathDatosString))

                {
                    ToolStripMenuItem item = new ToolStripMenuItem();
                    item.Click += new EventHandler(OpenDir);
                    string dirCutted = diritem.Split('\\').Last();
                    ((contextMenuStrip1.Items[2] as ToolStripMenuItem).DropDownItems[2] as ToolStripMenuItem).DropDownItems.Add(dirCutted, null, OpenDir) ;
                }
            }
            contextMenuStrip1.Show(Cursor.Position.X, Cursor.Position.Y);
        }

    }

所以我遇到的问题是每次启动listbox1_mouseclick时 - 一次又一次地创建项目(克隆) 所以我试图检查带有文本的项目是否已存在,但是弹出错误表明该集合已被更改。我认为这是因为我正在收集动态创建的项目? 此代码适用于删除,但也许有更优雅的解决方案吗?

1 个答案:

答案 0 :(得分:0)

在添加项目之前,请调用DropDown的Clear()方法。您每次都在扫描文件夹,因此从一个干净的平板开始是有意义的。树中包含子项且动态添加的每个点都需要首先满足Clear()的需要。