1
resposta

Função com multiplos input's

Boa noite gente.

quero desenhar uma função que aceite a criação de uma quantidade flexivel de SubMenus. conseguir fazer Utilizando uma lista para gerar os submenus, mas não consegui duas coisas que eu pretendia:

  1. fazer criar a função de maneira tal que a primeira string fosse o nome do menu e bastasse escrever outras strings para que automaticamente se tornassem submenus - uma função que pudesse aceitar uma quantidade indefinida de argumentos (ex.: DesenhaMenu("Menu 1", "Menu 1.1", "Menu 1.2","Menu 1.3", "Menu 1.4"...))
  2. tentei fazer uma sobrecarga para que a função ''DesenhaItemMenu(string texto)" pudesse aceitar ambas as formas de input, mas não consegui (tentei de diversas formas, mas num geral tinha o retorno "Uma variavel de local ou função denominada ... Já esta definida neste escopo")

Podem me sugerir uma maneira de fazer a função conforme o item 1? ou me indicar em qual curso da plataforma consigo obter esse conhecimento dos itens 1 e 2?

segue o código como consegui me resolver até o momento:

if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                var MenuContextoEsquedo = new ContextMenuStrip();
                List<string> subMenus = new List<string> 
                {
                    "Menu 1.1",
                    "Menu 1.2",
                    "Menu 1.3"
                };
                MenuContextoEsquedo.Items.Add(DesenhaItemMenuComSubMenus("Menu 1", subMenus));
                MenuContextoEsquedo.Show(this, new Point(e.X, e.Y));

            }

            ToolStripMenuItem DesenhaItemMenu(string texto)
            {
                var vToolTip = new ToolStripMenuItem();
                vToolTip.Text = texto;
                return vToolTip;
            }

            ToolStripMenuItem DesenhaItemMenuComSubMenus(string texto, List<string> Submenus)
            {
                var vToolTip = new ToolStripMenuItem();
                vToolTip.Text = texto;
                foreach (var submenu in Submenus)
                {
                    vToolTip.DropDownItems.Add(submenu);
                }

                return vToolTip;
            }
            
1 resposta

Olá Sergio

Para criar uma função que aceite uma quantidade flexível de submenus, você pode utilizar o conceito de parâmetros opcionais. Dessa forma, você pode definir um parâmetro que aceite uma quantidade indefinida de strings e, caso nenhum valor seja passado, ele será tratado como um array vazio.

Por exemplo:

ToolStripMenuItem DesenhaMenu(string texto, params string[] submenus)
{
    var menu = new ToolStripMenuItem(texto);
    
    foreach (var submenu in submenus)
    {
        menu.DropDownItems.Add(submenu);
    }
    
    return menu;
}

Com essa implementação, você pode chamar a função DesenhaMenu passando o nome do menu e quantos submenus desejar. Por exemplo:

var menu1 = DesenhaMenu("Menu 1", "Menu 1.1", "Menu 1.2", "Menu 1.3");
var menu2 = DesenhaMenu("Menu 2");
var menu3 = DesenhaMenu("Menu 3", "Menu 3.1", "Menu 3.2");

MenuContextoEsquedo.Items.Add(menu1);
MenuContextoEsquedo.Items.Add(menu2);
MenuContextoEsquedo.Items.Add(menu3);

Dessa forma, você pode criar uma quantidade flexível de submenus para cada menu.

Quanto à sua segunda dúvida, sobre a sobrecarga da função DesenhaItemMenu, o erro que você está recebendo ocorre porque você está tentando definir uma função com o mesmo nome em um mesmo escopo. Para resolver esse problema, você pode renomear a função que recebe uma lista de submenus para evitar conflitos de nomes.

Espero que essas sugestões possam te ajudar a resolver suas dúvidas! Bons estudos!