Как добавить ContextMenuStrip в ToolStripButton?

У меня есть набор инструментов, содержащий, помимо прочего, ToolStripComboBox и ToolStripButton. Я хочу добавить ContextMenuStrip к ним обоим, но у меня нет прямого доступа к панели инструментов или ее другому содержимому, поэтому я не могу установить контекстное меню панели инструментов.

Настроить ContextMenuStrip для ToolStripComboBox легко:

myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu;

но нет очевидного эквивалента для ToolStripButton. Как добавить ContextMenuStrip в ToolStripButton?

4 ответа

Решение

То, что предложил Джефф Йейтс, должно сработать.

Однако другой альтернативой является создание ваших собственных производных классов (MyToolSTripButton, MyToolStripTextBox ... и т. Д.), Дающих этим элементам свойство ContextMenuStrip, которое вы можете установить во время разработки, и чтобы ваши производные классы определяли правую кнопку мыши вниз или любые другие события, которые будут вызвать отображение контекстного меню.

Это освобождает от любых знаний, необходимых только для тех предметов, которые заинтересованы.

Ниже приведен один из таких примеров использования ToolStripTextBox в качестве элемента.

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));
        }
    }
}

Вам нужно будет установить контекстное меню на ToolStrip, а затем обработать всплывающее окно контекстного меню или связанное событие и нажать кнопку, на которой нажимается кнопка мыши, чтобы определить, следует ли отображать контекстное меню ToolStrip и что оно должно содержать.

Это потому, что ToolStripComboBox содержит элемент управления "System.Windows.Forms.ComboBox", а "ToolStripButton" не содержит "System.Windows.Forms.Control". Это специальный элемент toolstrip, кнопка которого поддерживается всплывающей подсказкой.

Вы должны использовать ContextMenu на всплывающей подсказке, или вы можете добавить раскрывающийся список к кнопке toolstrip.

Хороший вопрос. Возможно, вы сможете получить доступ к родителю toolstrip (myToolStripButton.Parent или что-то подобное) и прикрепите там контекстное меню.

Другие вопросы по тегам