Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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#菜单提示面板视觉异常_C#_Winforms_Menuitem_Menustrip - Fatal编程技术网

C#菜单提示面板视觉异常

C#菜单提示面板视觉异常,c#,winforms,menuitem,menustrip,C#,Winforms,Menuitem,Menustrip,我正在给菜单条上色以匹配我的应用程序主题。然而,每次我尝试它时,我都会在面板分隔符(白色矩形)的左侧看到这种奇怪的视觉异常,也有一些奇怪的复选框位置(可能相关?) 这是什么原因造成的,如何消除 多谢各位 示例代码: private Color MainColor=Color.FromArgb(39,40,34); 公共类MenuStripRenderer:ToolStripProfessionalRenderer { 受保护的覆盖无效OnRenderNuItemBackground(Tool

我正在给菜单条上色以匹配我的应用程序主题。然而,每次我尝试它时,我都会在面板分隔符(白色矩形)的左侧看到这种奇怪的视觉异常,也有一些奇怪的复选框位置(可能相关?)

这是什么原因造成的,如何消除

多谢各位

示例代码:

private Color MainColor=Color.FromArgb(39,40,34);
公共类MenuStripRenderer:ToolStripProfessionalRenderer
{
受保护的覆盖无效OnRenderNuItemBackground(ToolStripItemRenderReventArgs e)
{
矩形rect=新矩形(Point.Empty,e.Item.Size);
如果(如所选项目)
{
Color=Color.FromArgb(24,25,19);
使用(SolidBrush笔刷=新的SolidBrush(颜色))
e、 图形。填充矩形(画笔,矩形);
}
其他的
{
使用(SolidBrush笔刷=新的SolidBrush(主颜色))
e、 图形。填充矩形(画笔,矩形);
}
}
受保护的覆盖无效OnRenderItemText(ToolStripItemTextRenderReventArgs e)
{
e、 Item.ForeColor=颜色.白色;
base.OnRenderItemText(e);
}
受保护的替代无效OnRenderSeparator(ToolStripSeparator RenderReventArgs e)
{
基于渲染器分离器(e);
}
公共MenuStripRenderer():基本(新MenuStripColor()){}
}
公共类菜单颜色:ProfessionalColorTable
{
公共覆盖颜色工具StripDropDownBackground
{
获取{return MainColor;}
}
公共覆盖颜色工具StripContentPanelGradientBegin
{
获取{return MainColor;}
}
公共覆盖颜色工具StripContentPanelGradientEnd
{
获取{return MainColor;}
}
已选择公共覆盖颜色菜单项
{
获取{return MainColor;}
}
公共覆盖颜色菜单项顺序
{
获取{return MainColor;}
}
公共覆盖颜色菜单ItemSelectedRadientBegin
{
获取{return MainColor;}
}
公共覆盖颜色菜单emSelectedGradientEnd
{
获取{return MainColor;}
}
公共覆盖颜色菜单项顺序
{
获取{return MainColor;}
}
}
//在表单Load()中
this.menuStrip1.Renderer=新的MenuStripRenderer();
this.menuStrip1.BackColor=MainColor;
this.menuStrip1.ForeColor=Color.White;

我认为您也必须覆盖ImageMargin绘图:

protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) {
  //base.OnRenderImageMargin(e);
  using (SolidBrush brush = new SolidBrush(MainColor)) {
    e.Graphics.FillRectangle(brush, e.AffectedBounds);
  }
}

我不知道是什么原因导致您的复选标记问题,因为我无法在我的机器上复制该问题。我猜这可能是您的windows中的图形DPI设置。

关于白色矩形,您是对的!非常感谢。我将使用我的DPI设置,看看会发生什么。我在4k显示器上运行,所以我的缩放率大约为225%