winforms 是否可以在自定义呈现器中更改ToolStripMenuItem字体

gcmastyq  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(247)

我有一个带有自定义渲染器的菜单:

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

当鼠标移到菜单项上时,有没有办法改变字体或者使菜单项变成斜体?
我有改变背景的事件,但不知道字体/字体颜色?

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

34gzjxbg1#

您可以继承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)
txu3uszq

txu3uszq2#

您可以使用ToolStrip的属性手动变更ForeColor和Font属性,而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);

下面是一个自定义渲染器的屏幕快照,我在更改ToolStripButtons和ToolStripMenuItems的字体和颜色后,将其字体样式更改为粗体和斜体,前景色更改为绿色,并将该渲染器用于Office 2003样式的工具条。

相关问题