Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以在自定义渲染器中更改ToolStripMenuItem的字体吗_C#_Winforms_Toolstripmenu - Fatal编程技术网

C# 可以在自定义渲染器中更改ToolStripMenuItem的字体吗

C# 可以在自定义渲染器中更改ToolStripMenuItem的字体吗,c#,winforms,toolstripmenu,C#,Winforms,Toolstripmenu,我有一个带有自定义渲染器的菜单: menuMain.Renderer = new ToolStripProfessionalRenderer(new MenuColors()); 当鼠标移到菜单项上时,有没有办法改变字体或使其倾斜 我有更改背景的活动,但不知道字体/字体颜色 internal class MenuColors : ProfessionalColorTable { public override Color MenuItemSelected { g

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

menuMain.Renderer = new ToolStripProfessionalRenderer(new MenuColors());
当鼠标移到菜单项上时,有没有办法改变字体或使其倾斜

我有更改背景的活动,但不知道字体/字体颜色

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

可以使用ToolStrip的属性手动更改前景色和字体属性,渲染器将在渲染时使用它们

如果您希望在鼠标输入或选择项目时使用不同的字体和颜色,则应处理适当的事件以更改该选项中的字体和颜色,例如,当鼠标位于项目上方时,下面的代码将项目的字体更改为斜体:

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);
if (e.Item.Selected && e.Item.OwnerItem != null)
这是一个自定义渲染器的屏幕截图,我在更改ToolStripButtons和ToolStripMenuItems的字体和颜色时将其用于具有Office 2003样式的toolstrip,然后当鼠标悬停在某个项目上时,我将其字体样式更改为粗体和斜体,并将其前景色更改为绿色。

您可以继承、覆盖和使用以下内容:

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属性来决定在不同情况下要执行的操作,例如,如果您希望该逻辑仅在子菜单上工作,则可以使用如下代码:

YourToolStripMenuItem.MouseEnter += new System.EventHandler(this.toolStripMenuItem_MouseEnter);
YourToolStripMenuItem.MouseLeave += new System.EventHandler(this.toolStripMenuItem_MouseLeave);
if (e.Item.Selected && e.Item.OwnerItem != null)

谢谢-但是我需要使用代码,因为我的菜单项是用代码动态创建的。谢谢您的编辑。实际上,我目前正在使用鼠标进入和离开事件,但我特别希望通过内置渲染器(如ToolStripProfessionalRenderer或ProfessionalColorTable)来实现,因为它提供了更多的灵活性和选项。但是您的代码确实有助于选项b。可能对WPF项目有用
ToolStripMenuItem1.Font=新字体(ToolStripMenuItem1.Font,System.Drawing.FontStyle.Bold)@vinsa For WPF,您可能会发现它很有用。谢谢-这就是我要找的。如何区分主菜单和子菜单(下拉项)的逻辑。这段代码同时改变了这两种情况。