Это общая проблема, и я нашел самое простое решение, чтобы поместить «общий» код внутри MenuFeature
класса, который наследует от ToolStripMenuItem
.
Вы все еще должны создать 2 экземпляра этого класса, но каждый экземпляр очень легкий и имеет только код для каких-либо различий между 2 использований (т.е. элемент ContextMenu может использовать ToolStripItemDisplayStyle.ImageAndText
, в то время как элемент ToolStrip может использовать ToolStripItemDisplayStyle.Image
).
Это позволяет использовать общий код только один раз внутри вашего настраиваемого класса MenuFeature
, но при этом позволяет изменять локальные значения для каждого использования этого пункта меню.
Если вы хотите, чтобы автоматически синхронизировать свойства, как Enabled
/Visible
/и т.д., вы можете сохранить статическую коллекцию всех экземпляров внутри конструктора, а затем обновить все элементы, используя такие события, как EnabledChanged
/и т.д.. Тем не менее, я бы рекомендовал против этого, так как я обнаружил, что разные экземпляры того же меню «функция» часто нуждаются в их собственном состоянии, но это выходит за рамки этого Вопроса, те, кто интересуется тем, как я могу управлять элементами, могут комментировать на этот ответ или PM мне.
Если меню не является динамическим, вы можете просто построить 2 отдельно, а затем сделать синхронизацию для их синхронизации. –
Я просто делаю элементы. Отключить вручную: toolStripItem1.Disabled = true; contextStripItem1.Disabled = true; для всех вещей, которые у меня есть, пока. –
, тогда я действительно не вижу проблемы. вы все равно можете сделать эквивалентную кнопку у одного и того же обработчика событий, так что обе сделают то же самое. –