Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2014, 17:22   #1
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
Вопрос contextMenu

Hello, ребят, такой вопрос.
Как можно изменить цвет выделения элемента в contextMenu?
Заметил то, что он изменяется при изменении свойства RenderMode.
Вот пример выделения, если параметр RenderMode = ManagerRenderMode:

А вот RenderMode = System:



up..

Последний раз редактировалось SPLER; 18.03.2014 в 13:38. Причина: up
SPLER вне форума Ответить с цитированием
Старый 18.03.2014, 20:23   #2
mr_cipher
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 29
По умолчанию

wpf или winForms?
mr_cipher вне форума Ответить с цитированием
Старый 19.03.2014, 02:55   #3
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
По умолчанию

Точно, прошу прощения, за то что сразу не указал - WinForms
SPLER вне форума Ответить с цитированием
Старый 19.03.2014, 09:44   #4
mr_cipher
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 29
По умолчанию

Для управления отрисовкой ContextMenuStrip Нужно создать класс наследованный от ToolStripRenderer ( в нём объявлены куча обработчиков событий для управления отрисовкой разных элементов, в том числе и MenuItem). Внутри созданного класса нужно переопределить методы для нужных элементов. Выглядит так:

Код:
class ContextMenuStripBackColorRenderer : ToolStripRenderer
        {           

            protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
            {
                Graphics g = e.Graphics;
                Rectangle bounds = new Rectangle(System.Drawing.Point.Empty, e.Item.Size);

                if (e.Item.Selected)
                {

                    using (Brush b = new System.Drawing.SolidBrush(Color.Red))
                    {
                        g.FillRectangle(b, bounds);
                    }

                }
            }

        }
И затем в конструкторе формы или где-нибудь ещё присвоить экземпляр этого класса свойству Renderer и вызвать Invalidate :

Код:
contextMenuStrip1.Renderer = new ContextMenuStripBackColorRenderer();
            contextMenuStrip1.Invalidate();
В этом примере цвет фона выделенного элемента контекстного меню - красный.

Последний раз редактировалось mr_cipher; 19.03.2014 в 09:47.
mr_cipher вне форума Ответить с цитированием
Старый 19.03.2014, 11:50   #5
SPLER
Пользователь
 
Регистрация: 15.02.2014
Сообщений: 53
По умолчанию

Прекрасно! Огромное спасибо!
SPLER вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц