Como faço para programaticamente fio até eventos ToolStripButton em C #?
-
01-07-2019 - |
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.
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:
- Crie o ToolStripButton.
- Criar um controle de rótulo e defina as propriedades de fonte para combinar com seu botão.
- Definir o texto do rótulo para combinar com seu botão.
- Definir o rótulo para AutoSize.
- Leia a largura da etiqueta e usar isso para definir a largura do ToolStripButton.
É hacky, mas funciona.