Pergunta

Eu estou programaticamente adicionar itens ToolStripButton a um menu de contexto.

Essa parte é fácil.

this.tsmiDelete.DropDownItems.Add("The text on the item.");

No entanto, eu também preciso conectar-se os eventos de modo que quando o usuário clica no item de algo realmente acontece!

Como posso fazer isso? O método que manipula o clique também precisa receber algum tipo de ID ou objeto que se relaciona com o ToolStripButton específico que o usuário clicou.

Foi útil?

Solução

Não foi possível que você acabou de se inscrever para o evento Click? Algo parecido com isto:

ToolStripButton btn = new ToolStripButton("The text on the item.");
this.tsmiDelete.DropDownItems.Add(btn);
btn.Click += new EventHandler(OnBtnClicked);

E OnBtnClicked seria declarada como este:

private void OnBtnClicked(object sender, EventArgs e)
{
    ToolStripButton btn = sender as ToolStripButton;

    // handle the button click
}

O remetente deve ser o ToolStripButton, para que possa lançá-lo e fazer o que você precisa fazer com ele.

Outras dicas

Obrigado por sua ajuda com que Andy. O meu único problema agora é que o AutoSize não está trabalhando nos ToolStripButtons que eu estou adicionando! Eles são todos muito estreito.

É um pouco estranho porque ele estava trabalhando anteriormente.


Update: Há definitivamente algo de errado com AutoSize para ToolStripButtons programaticamente criados. No entanto, eu encontrei uma solução:

  1. Crie o ToolStripButton.
  2. Criar um controle de rótulo e defina as propriedades de fonte para combinar com seu botão.
  3. Definir o texto do rótulo para combinar com seu botão.
  4. Definir o rótulo para AutoSize.
  5. Leia a largura da etiqueta e usar isso para definir a largura do ToolStripButton.

É hacky, mas funciona.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top