Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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_Render_Toolstrip - Fatal编程技术网

C# 工具条圆角

C# 工具条圆角,c#,winforms,render,toolstrip,C#,Winforms,Render,Toolstrip,我正在开发一个Windows窗体应用程序C、.NET 4.0,VS 2010,其中我有一个非常标准的主窗体,带有工具条GripStyle:Hidden、Dock:Top、RenderMode:ManagerRenderMode。toolstrip包含几个基本项ToolStripLabel、ToolStripSeparator、ToolStripSplitButton 其呈现方式如下: toolStrip_Actions.Renderer = new ToolStripProfessionalRe

我正在开发一个Windows窗体应用程序C、.NET 4.0,VS 2010,其中我有一个非常标准的主窗体,带有工具条GripStyle:Hidden、Dock:Top、RenderMode:ManagerRenderMode。toolstrip包含几个基本项ToolStripLabel、ToolStripSeparator、ToolStripSplitButton

其呈现方式如下:

toolStrip_Actions.Renderer = new ToolStripProfessionalRenderer() { RoundedEdges = false };
((ToolStripProfessionalRenderer)toolStrip_Actions.Renderer).RoundedEdges = false;
起初,我只是想在toolstrip下面添加一个“底部”边框,但我也注意到这个toolstrip是用“圆角”渲染的,您可以在图像中看到右侧的顶部和底部,以及一条垂直渐变线

我怎样才能使这些角不圆

我试过:

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        base.OnRenderToolStripBorder(e);

        var y = e.ToolStrip.Height-1;
        e.Graphics.DrawLine(new Pen(SystemColors.ControlDark, 1), new Point(0, y), new Point(e.ToolStrip.Width, y));
    }
并通过这个.toolStrip\u Actions.Renderer=new MainFormToolStripRenderer将其连接起来;在我的表单初始化中

这给了我底边,但对圆角没有任何作用。此外,通过添加底部边框,圆角更为明显:

接下来,我尝试在上面的同一事件处理程序中绘制一个矩形,以尝试至少在实心矩形边框后面隐藏圆角和垂直渐变。这不起作用,因为可用绘图区域e.AffectedBounds位于圆角边框内

我还尝试将ToolStrip的RenderMode设置为System,而不使用渲染器。在这种情况下,toolstrip的角看起来非常适合矩形,但是工具栏中的splitbutton似乎被破坏了。由于未知的原因,单击向下箭头不显示下拉列表,并且总体的外观有点不令人印象深刻,相当平坦,直到您将鼠标悬停在toolstrip中的一些按钮上

我想最终我宁愿使用ManagerEndedMode,或者从专业渲染器继承的自定义渲染器,但我需要去掉圆角。 除其他外,我发现这似乎接近我所看到的,但并没有给我一个我的案件的答案


提前感谢

在渲染器类中尝试以下操作:

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer {

  public MainFormToolStripRenderer() {
    this.RoundedEdges = false;
  }
}

如am05mhz所述,只需选择RenderMode>System,圆角就会消失:

基于by,您不一定需要实现新的呈现器类,除非有令人信服的理由这样做

您可以按如下方式作为一个单行程序执行此操作:

toolStrip_Actions.Renderer = new ToolStripProfessionalRenderer() { RoundedEdges = false };
((ToolStripProfessionalRenderer)toolStrip_Actions.Renderer).RoundedEdges = false;
或者,由于RenderMode设置为ManagerRenderMode的ToolStrip的默认渲染器已经是ToolStripProfessionalRenderer,因此可以将其强制转换为ToolStripProfessionalRenderer,并直接访问RoundedEdge属性,如下所示:

toolStrip_Actions.Renderer = new ToolStripProfessionalRenderer() { RoundedEdges = false };
((ToolStripProfessionalRenderer)toolStrip_Actions.Renderer).RoundedEdges = false;

Winforms对于在不完全创建自己的控件的情况下呈现不同的内容来说是一件痛苦的事情。现在可能已经太晚了,但是你有没有弄乱WPF/XAML?谢谢,但是我们之前已经看过WPF了,现在我们正在尝试使用基本的winforms。如果我需要覆盖某些细节,我不介意从标准Toolstrip继承,但是是的:不必自己渲染整个东西,尤其是使用我们需要的拆分按钮,等等,这将是很好的!谢谢,我在自定义渲染器中将.RoundedEdges属性设置为false,但这就是诀窍!仍然有一点麻烦,因为现在的角落没有圆分割按钮停止工作。。。但我会接受你的回答,因为它解决了主要问题,让我走上了正确的道路。实际上,ToolStrip属性中有一个RenderMode选项,它有3个选项:System、Professional和ManagerRenderMode。第一个选项允许操作系统渲染未舍入的ToolStrip,最后两个选项舍入