C#给ToolStrip加一个checkbox自定义控件,如何获取此控件是不是勾选?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#给ToolStrip加一个checkbox自定义控件,如何获取此控件是不是勾选?相关的知识,希望对你有一定的参考价值。

public class ToolStripCheckBox : ToolStripControlHost

public ToolStripCheckBox() : base(new CheckBox())


ToolStripCheckBox item3 = new ToolStripCheckBox();
item3.Text = "是否查询所有数据";
toolStrip1.Items.Add(item3);

参考技术A 首先你要知道checkbox自定义控件获取控件是否选中的属性或方法,必须是public的,然后在外边直接调用那个属性或方法即可追问

就是找不到对应的属性和方法.

追答

那肯定是你checkbox自定义控件的问题 估计是没有设计相应的方法或属性 要修改控件 而不是所在的toolstrip

追问

我觉着也像 算了 我直接换个实现方式得了 ms为什么不给tooStrip多增加几个控件呢 那几个太少了 自定义很头疼 不管怎样 谢啦

本回答被提问者采纳

ToolStrip 圆角

【中文标题】ToolStrip 圆角【英文标题】:ToolStrip Rounded Corners 【发布时间】:2012-11-05 07:18:05 【问题描述】:

我正在开发一个 Windows 窗体应用程序(C#、.NET 4.0、VS 2010),其中我有一个带有 ToolStrip 的非常标准的 MainForm(GripStyle:隐藏,Dock:顶部,RenderMode:ManagerRenderMode)。工具条包含一些基本项(ToolStripLabel、ToolStripSeparator、ToolStripSplitButton)。

呈现如下:

起初我只是想在工具条下方添加一个“底部”边框,但我也注意到这个工具条是用“圆角”渲染的(您可以在图像中看到右侧的顶部和底部) ) 和垂直渐变线。

如何使这些角不圆?

我试过了:

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));
    

并在我的表单初始化中通过this.toolStrip_Actions.Renderer=new MainFormToolStripRenderer(); 将其连接起来。

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

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

我还尝试将 ToolStrip 的 RenderMode 设置为 System(而不是使用我的渲染器)。在这种情况下,工具条的角落似乎很贴合(矩形),但工具栏中的拆分按钮似乎已损坏(单击向下箭头不显示下拉菜单),原因尚不清楚,整体外观-n -feel 有点令人印象深刻(非常平淡,直到您将鼠标悬停在工具条中的某些按钮上)。

我想最后我宁愿坚持使用 ManageeRenderedMode,或者从 Professional 继承的自定义渲染器 - 但我需要摆脱圆角。 其中,我发现 this SO Q 似乎与我正在查看的内容很接近,但没有为我的案例提供答案。

提前致谢

【问题讨论】:

Winforms 在不完全创建自己的控件的情况下渲染不同的东西是一件痛苦的事情。现在可能为时已晚,但是您是否搞砸了 WPF/XAML? 谢谢,但我们之前看过 WPF,现在我们正试图坚持使用“基本”winforms。如果我需要覆盖某些细节,我不介意从标准工具条继承,但是是的:不必自己渲染整个东西会很好(尤其是我们需要在其中的拆分按钮等) ) 【参考方案1】:

以LarsTech 的accepted answer 为基础,您不一定需要实现新的渲染器类,除非有令人信服的理由。

您可以按照以下方式将其作为一个单行来执行:

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

或者由于 RenderMode 设置为 ManagerRenderMode 的 ToolStrip 的默认渲染器已经是 ToolStripProfessionalRenderer,您可以将其转换为这样并直接访问 RoundedEdges 属性,如下所示:

((ToolStripProfessionalRenderer)toolStrip_Actions.Renderer).RoundedEdges = false;

【讨论】:

【参考方案2】:

正如 am05mhz 提到的,只需选择 RenderMode > System 圆角就会消失:

【讨论】:

【参考方案3】:

在你的渲染器类中试试这个:

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer 

  public MainFormToolStripRenderer() 
    this.RoundedEdges = false;
  

【讨论】:

太棒了!谢谢(我实际上在自定义渲染器中将 .RoundedEdges 属性设置为 false,但这就是诀窍)!仍然有点麻烦,因为现在角落没有变圆,拆分按钮停止工作......但我会接受你的回答,因为它解决了主要问题并使我走上了正确的道路。 实际上,ToolStrip 属性中有一个 RenderMode 选项,它有 3 个选项:System、Professional 和 ManagerRenderMode。第一个选项让操作系统渲染未四舍五入的 ToolStrip,最后两个是四舍五入

以上是关于C#给ToolStrip加一个checkbox自定义控件,如何获取此控件是不是勾选?的主要内容,如果未能解决你的问题,请参考以下文章

c# toolStrip 中的按钮toolStripButton

窗体中怎么让toolstrip漂浮(停靠已经做出来了)(C#)

C# toolstrip和toolstripcontainer 悬浮 停靠 事件

c# toolstrip控件怎么把左边的几个小点去掉??

C#中Toolstrip控件问题

c# toolstrip 下的toolstripbutton怎么获取?