none
Como adicionar subitens em um ToolStrip? RRS feed

  • Pergunta

  • Olá

    Eu tenho um ToolStripDropDownButton onde carrego itens de um xml dentro de grupos.

       newChild2.Image = a.ToBitmap
                            newChild2.Text = xmlTitles(i).FirstChild.Value

    AddHandler newChild2.Click, AddressOf menuItem900000000_Click ToolStripDropDownButton3.DropDownItems.Add(newChild3) newChild3.DropDownItems.Add(newChild2)


    Preciso que fique assim:

              > Grupo 1 > Ferramenta 1

                                  Ferramenta 2

              > Grupo 2 > Ferramenta 1

                                  Ferramenta 2

    Mas ta ficando:

              > Grupo 1 > Ferramenta 1

              > Grupo 1 > Ferramenta 2

              > Grupo 2 > Ferramenta 1

              > Grupo 2 > Ferramenta 2

    Ou seja, ta adicionando o grupo que já existe. Os itens do mesmo grupo devem ser adicionados junto.

    Desde já agradeço.

    quinta-feira, 17 de novembro de 2016 19:11

Respostas

  • Eliseu,

    Fiz um código pra simular e ver se eu entendi o que você quer. Veja se te atende. Basicamente a chave é definir a propriedade Name dos itens para que depois você possa procurá-los através da propriedade DropDownItems:

    private void Form1_Load(object sender, EventArgs e)
            {
                // Apenas simulando um cenário
                var item1 = new ToolStripDropDownButton("Item 1");
                item1.Name = item1.Text;
                var item2 = new ToolStripDropDownButton("Item 2");
                item2.Name = item2.Text;
    
                var item1Subitem1 = new ToolStripButton("Item 1 - Subitem 1");
                var item2Subitem1 = new ToolStripButton("Item 2 - Subitem 1");
    
                item1.DropDownItems.Add(item1Subitem1);
                item2.DropDownItems.Add(item2Subitem1);
    
                toolStripDropDownButton1.DropDownItems.Add(item1);
                toolStripDropDownButton1.DropDownItems.Add(item2);
    
                // Aqui que vem a parte que entendi ser sua dúvida
                var novoItem = new ToolStripDropDownButton("Item 2");
                var novoItemSubitem1 = new ToolStripDropDownButton("Subitem do novo item");
    
                // Buscando o item existente
                var itemExistente = toolStripDropDownButton1.DropDownItems[novoItem.Text] as ToolStripDropDownButton;
                if (itemExistente != null) // Verificando se encontrou algo
                {
                    itemExistente.DropDownItems.Add(novoItemSubitem1);
                }
                else
                {
                    novoItem.DropDownItems.Add(novoItemSubitem1);
                    toolStripDropDownButton1.DropDownItems.Add(novoItem);
                }
            }


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Eliseu5 sábado, 19 de novembro de 2016 00:38
    sexta-feira, 18 de novembro de 2016 18:43

Todas as Respostas

  • Eliseu, 

    Como está seu código para criar estes elementos?


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sexta-feira, 18 de novembro de 2016 00:17
  • Olá Juliano

    Não entendi sua pergunta. Tudo está funcionando perfeitamente, a única coisa que preciso é que se o grupo já existir adiciona o item dentro, se não existir cria o grupo e adiciona dentro.

    sexta-feira, 18 de novembro de 2016 09:43
  • Eliseu,

    Fiz um código pra simular e ver se eu entendi o que você quer. Veja se te atende. Basicamente a chave é definir a propriedade Name dos itens para que depois você possa procurá-los através da propriedade DropDownItems:

    private void Form1_Load(object sender, EventArgs e)
            {
                // Apenas simulando um cenário
                var item1 = new ToolStripDropDownButton("Item 1");
                item1.Name = item1.Text;
                var item2 = new ToolStripDropDownButton("Item 2");
                item2.Name = item2.Text;
    
                var item1Subitem1 = new ToolStripButton("Item 1 - Subitem 1");
                var item2Subitem1 = new ToolStripButton("Item 2 - Subitem 1");
    
                item1.DropDownItems.Add(item1Subitem1);
                item2.DropDownItems.Add(item2Subitem1);
    
                toolStripDropDownButton1.DropDownItems.Add(item1);
                toolStripDropDownButton1.DropDownItems.Add(item2);
    
                // Aqui que vem a parte que entendi ser sua dúvida
                var novoItem = new ToolStripDropDownButton("Item 2");
                var novoItemSubitem1 = new ToolStripDropDownButton("Subitem do novo item");
    
                // Buscando o item existente
                var itemExistente = toolStripDropDownButton1.DropDownItems[novoItem.Text] as ToolStripDropDownButton;
                if (itemExistente != null) // Verificando se encontrou algo
                {
                    itemExistente.DropDownItems.Add(novoItemSubitem1);
                }
                else
                {
                    novoItem.DropDownItems.Add(novoItemSubitem1);
                    toolStripDropDownButton1.DropDownItems.Add(novoItem);
                }
            }


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Eliseu5 sábado, 19 de novembro de 2016 00:38
    sexta-feira, 18 de novembro de 2016 18:43
  • Olá Juliano

    Parece funcionar, mas inseri em meu código e não deu certo:

     		For i As Integer = 0 To xmlTitles.Count - 1
                            Dim assss As String = If(xmlTitles4(i).FirstChild Is Nothing, "", xmlTitles4(i).FirstChild.Value)
    
                            Dim novoItem = New ToolStripDropDownButton(assss)
                            Dim novoItemSubitem1 = New ToolStripDropDownButton(If(xmlTitles(i).FirstChild Is Nothing, "", xmlTitles(i).FirstChild.Value))
                            Dim itemExistente = CType(ToolStripDropDownButton3.DropDownItems(novoItem.Text), ToolStripDropDownButton)
                            If (Not (itemExistente) Is Nothing) Then
                                itemExistente.DropDownItems.Add(novoItemSubitem1)
                            Else
                                novoItem.DropDownItems.Add(novoItemSubitem1)
                                ToolStripDropDownButton3.DropDownItems.Add(novoItem)
                            End If
                    Next




    • Editado Eliseu5 sexta-feira, 18 de novembro de 2016 23:22
    sexta-feira, 18 de novembro de 2016 23:19
  • Falta você atribuir um valor para a propriedade Name dos itens ToolStripDropDownButton. Atribua o mesmo valor da propriedade Text assim como fiz no meu código de teste.

    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sexta-feira, 18 de novembro de 2016 23:57
  • Entendi, agora falta atribuir o:

     AddHandler newChild2.Click, AddressOf menuItem900000000_Click

    Vamos ver...

    • Editado Eliseu5 sábado, 19 de novembro de 2016 00:23
    sábado, 19 de novembro de 2016 00:19
  • Cara, deu certo, não acredito. Vlw, muito obrigado! :)
    sábado, 19 de novembro de 2016 00:37