2013-06-14 2 views
0

У меня есть эта задача: есть контекст, который в одной из ветвей есть 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 в настоящее время начала - элемент создается снова и снова (клоны) Так я попытался сделать чек, если элемент с текстом уже существует, но ошибка всплывает, сказав, что коллекция была изменена. Я думаю, это из-за динамически созданных предметов, которые я собираю? Этот код работает для удаления, но, возможно, для этого есть более элегантное решение?

ответ

0

Перед тем, как добавить предметы, позвоните по методу Clear() вашего DropDown. Вы просматриваете папки каждый раз, поэтому имеет смысл начать с чистого листа. Каждая точка дерева, которая имеет подпункты и к которой вы добавляете динамически, в первую очередь подчиняется этой потребности Clear().

+0

Спасибо за ваш ответ, но я не могу, потому что, как я уже сказал, у меня уже есть 2 предмета, которые должны присутствовать все время. –

Смежные вопросы