Como faço para adicionar um ContextMenuStrip a um ToolStripButton?
-
08-07-2019 - |
Pergunta
Eu tenho um toolstrip contendo, entre outras coisas, um ToolStripComboBox e uma ToolStripButton. Eu quero adicionar um ContextMenuStrip a ambos, mas eu não tenho acesso directo à toolstrip ou seus outros conteúdos, por isso não posso definir o menu de contexto do toolstrip.
Como definir a ContextMenuStrip para o ToolStripComboBox é fácil:
myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu;
mas não há nenhum equivalente óbvia para o ToolStripButton. Como faço para adicionar um ContextMenuStrip a um ToolStripButton?
Solução
O que Jeff Yates sugeriu deve funcionar.
No entanto, outra alternativa é criar suas próprias classes derivadas (MyToolSTripButton, MyToolStripTextBox ... etc) dar a esses itens uma propriedade ContextMenuStrip que você pode definir no momento da concepção, e ter suas classes derivadas detectar o baixo direito do mouse, ou o que quer outros eventos irá acionar a exibição do menu de contexto.
Este offloads nenhum do conhecimento necessário para apenas os itens interessados.
A seguir é um exemplo usando ToolStripTextBox como o item.
public class MyTextBox : ToolStripTextBox
{
ContextMenuStrip _contextMenuStrip;
public ContextMenuStrip ContextMenuStrip
{
get { return _contextMenuStrip; }
set { _contextMenuStrip = value; }
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
if (_contextMenuStrip !=null)
_contextMenuStrip.Show(Parent.PointToScreen(e.Location));
}
}
}
Outras dicas
Você precisará definir o menu de contexto para o ToolStrip e depois lidar com o Popup do menu de contexto ou um evento relacionado e teste de visitas que o botão do mouse está sobre a determinar se você deve mostrar o menu de contexto do ToolStrip eo que deveria contêm.
É porque um ToolStripComboBox contém controle "System.Windows.Forms.ComboBox", mas não "ToolStripButton" não contém "System.Windows.Forms.Control". Seu item de toolstrip especial, que é botão é mantido por toolstip.
Você deve usar ContextMenu em toolstip ou você pode adicionar suspenso o item ToolStripButton.
Boa pergunta. Você pode ser capaz de obter acesso ao toolstrip
pai (myToolStripButton.Parent
ou algo similar) e anexar o menu de contexto lá.