Вы можете изменить шрифт для ToolStripMenuItem в пользовательском рендерере

У меня есть меню с пользовательским рендерером:

menuMain.Renderer = new ToolStripProfessionalRenderer(new MenuColors());

Есть ли способ изменить шрифт или сделать пункт меню курсивом при наведении на него курсора?

У меня есть событие, чтобы изменить фон, но не знаете о шрифте / цвет шрифта?

internal class MenuColors : ProfessionalColorTable
{
    public override Color MenuItemSelected
    {
        get { return MenuHoverColor; }
    }
}

2 ответа

Решение

Вы можете наследовать от ToolStripProfessionalRenderer и переопределять OnRenderItemText и использовать ToolStripItemTextRenderEventArgs, как показано ниже:

public class SampleRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
    {
        // Here set e.TextFont, e.TextColor and so on, For example:
        if (e.Item.Selected)
        {
            e.TextColor = Color.Blue;
            e.TextFont = new Font(e.Item.Font, FontStyle.Italic | FontStyle.Bold);
        }
        base.OnRenderItemText(e);
    }
}

Вы можете использовать свойства e.Item, чтобы решить, что делать в различных ситуациях, например, если вы хотите, чтобы логика работала только в подменю, вы можете использовать код, подобный следующему:

if (e.Item.Selected && e.Item.OwnerItem != null)

Вы можете изменить ForeColor и Font Property вручную, используя свойства ToolStrip, и Renderer будет использовать их при рендеринге.

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

private void toolStripMenuItem_MouseEnter(object sender, EventArgs e)
{
    var item=(ToolStripMenuItem)sender;
    item.ForeColor = Color.Blue;
    item.Font = new Font(item.Font, FontStyle.Italic | FontStyle.Bold );
}

private void toolStripMenuItem_MouseLeave(object sender, EventArgs e)
{
    var item = (ToolStripMenuItem)sender;
    item.ForeColor = Color.Green;
    item.Font = new Font(item.Font, FontStyle.Regular);
}

Вы можете назначить эти обработчики для ваших ToolStripMenuItems динамически следующим образом:

YourToolStripMenuItem.MouseEnter += new System.EventHandler(this.toolStripMenuItem_MouseEnter);
YourToolStripMenuItem.MouseLeave += new System.EventHandler(this.toolStripMenuItem_MouseLeave);

Вот снимок экрана пользовательского средства визуализации, которое я использую для набора инструментов со стилями Office 2003, когда я изменил шрифт и цвет ToolStripButtons и ToolStripMenuItems, а затем, когда мышь находится над элементом, я изменяю его стиль шрифта на жирный, курсив и его цвет. зеленый

Другие вопросы по тегам