2009-02-15 2 views
0

Я занимаюсь графическим интерфейсом для рисованной программы, где пользователь сможет выбрать инструмент рисования из ToolStrip. Некоторые из этих инструментов имеют вариации, и я хотел бы, чтобы пользователь мог выбрать один из всплывающего меню.ToolStripButton с всплывающим меню?

Любой, кто знаком с интерфейсом панели инструментов Photoshop, узнает, что мне нужно: пользователь может либо нажать кнопку, либо начать работу с выбранным инструментом, либо выбрать один из инструментов из всплывающего меню, которое появляется при нажатии, и с этой точки на кнопке будет отображаться этот инструмент. Кроме того, кнопка будет иметь свойство Проверено значение Истина, если выбрано это семейство инструментов.

Я думал, что это может быть выполнено с помощью SplitButton или DropDownButton, но у них нет свойства Checked, чтобы пользователь мог видеть, какой инструмент выбран в данный момент. Поэтому я пошел с ToolStripButton и ContextMenuStrip, который отображается при нажатии.

Проблема заключается в том, что, поскольку я беру позицию курсора для отображения ContextMenuStrip, в зависимости от того, какая часть элемента ToolStripButton нажата, всплывающее меню может частично покрывать его, и это очень неполированный вид. Как я могу получить координаты экрана ToolStripButton? Или есть лучший (и все еще относительно простой) способ сделать это?

ответ

0

Вы не говорите, какую технологию вы используете для графического интерфейса. Я предполагаю winforms или WPF. Если у вас есть выбор, WPF может стать лучшим долгосрочным выбором для поддержки не только ваших кнопок контекстного меню, но и поддержки части оформления вашей заявки.

Если вы используете winforms, просмотрели ли вы контекстное меню на своих основных кнопках?

1

Я реализовал эту функцию раньше в приложениях. В Photoshop каждый инструмент имеет другую иконку (лассо и полигональная лассо имеют разные значки, кисть и карандаш имеют разные значки). Таким образом, при использовании инструментальной полосы я использую кнопку разделения. Когда пользователь выбирает инструмент из выпадающего списка, вы применяете значок выбранного инструмента к кнопке разделения.

Инструмент ToolStripItem может иметь фоновое изображение. Чтобы отобразить выбранный элемент, вы можете просто установить фоновое изображение на сплошное полупрозрачное изображение (т. Е. Сплошной черный с прозрачностью 25%).

редактировать: Это, вероятно, будет лучше использовать полупрозрачную версию SystemColors.Highlight

+0

Это не выглядит как родной. Думаю, я просто буду придерживаться своего метода. Есть ли способ получить точные координаты экрана ToolStripButton (так что я всегда могу открыть ContextMenuStrip там)? – Mike

+0

Я не понимаю, когда вы говорите, что это не выглядит родным. Кроме того, кнопка разделения на полосе инструментов имеет встроенное контекстное меню, поэтому вам не нужно вручную позиционировать или отображать контекстное меню. – snarf