Вопрос

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

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

myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu;

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

Это было полезно?

Решение

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

Однако другой альтернативой является создание собственных производных классов (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 или что-то подобное) и присоединить там контекстное меню.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top