Как мы можем выделить активный элемент меню при нажатии на элемент полосы меню?

Я работаю над настольным приложением в С# WinForms. Я использовал меню для навигации между различными панелями. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу выделить активный цвет значка полосы меню. Описание в картинках лучше объяснит, чего я хочу достичь.

Это моя полоса меню

введите здесь описание изображения

и при нажатии MenuStripItem я хочу добиться этого

введите здесь описание изображения

Короче говоря, я хочу, чтобы элемент полосы меню оставался выделенным, когда я нажимаю на него Нажмите, точно так же, как Поиск и редактирование на картинке, а затем, если я нажму Новые клиенты, он должен быть выделен как Поиск и редактирование


person Ezaz    schedule 23.09.2017    source источник


Ответы (3)


Вместо этого вы можете использовать ToolStrip и установить для свойства items Checked значение true. Для этого вы можете обработать ItemClicked событие ToolStrip и проверить элементы следующим образом:

private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    foreach (ToolStripButton item in ((ToolStrip)sender).Items)
    {
        if (item != e.ClickedItem)
            item.Checked = false;
        else
            item.Checked = true;
    }
}

Таким образом, он показывает границу вокруг отмеченного элемента. Если по какой-либо причине вас не устраивает внешний вид, вы можете просто настроить внешний вид отмеченного элемента, создав собственный рендерер и назначив его в качестве рендерера ToolStrip следующим образом:

public class MyRenderer : ToolStripProfessionalRenderer
{
    public MyRenderer() : base(new MyColorTable())
    {
    }
}

public class MyColorTable : ProfessionalColorTable
{
    public override Color ButtonCheckedGradientBegin
    {
        get { return ButtonPressedGradientBegin; }
    }
    public override Color ButtonCheckedGradientEnd
    {
        get { return ButtonPressedGradientEnd; }
    }
    public override Color ButtonCheckedGradientMiddle
    {
        get { return ButtonPressedGradientMiddle; }
    }
}

И назначьте визуализатор в событии Load в конструкторе вашей формы после инициализации компонентов следующим образом:

toolStrip1.Renderer = new MyRenderer();

Таким образом, он показывает отмеченный элемент как выделенный.

person Reza Aghaei    schedule 23.09.2017
comment
Спасибо чувак мне очень помогло. Лучше использовать панель инструментов вместо полосы меню. Спасибо - person Ezaz; 23.09.2017

Выбранный элемент можно изменить Paint (не уверен, что есть более подходящее событие):

public Form1()
{
    InitializeComponent();

    ToolStripItem activeToolStripItem = null;
    menuStrip1.Paint += (o, e) => activeToolStripItem?.Select();
    menuStrip1.ItemClicked += (o, e) => activeToolStripItem = e.ClickedItem;
}
person Slai    schedule 23.09.2017

Установите цвет фона выбранного элемента в MenuStrip следующим образом:

private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    foreach (ToolStripMenuItem item in ((ToolStrip)sender).Items)
    {
        if (item != e.ClickedItem)
            item.BackColor = Color.White;
        else
            item.BackColor = Color.Cyan;
    }
}
person Graham Laight    schedule 23.08.2018