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?

Foi útil?

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á.

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