如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持

C#中toolStrip1控件详细使用方法 阅读详情

最近研究了一下如何将第三方控件嵌入到ToolStrip控件中,并能提供Design-Time下的支持.

下面将详细讲解如何把系统的MonthCalendar控件嵌入到ToolStrip控件中.

以下的两幅图片显示了最终的样子.

Run-Time下的样子

Design-Time下的样子

如何将第三方控件嵌入到ToolStrip(http://www.freeeim.com/bbs/)

微软实现了一个ToolStripControlHost类, 它是ToolStripComboBox, ToolStripTextBox, 和 ToolStripProgressBar等的基类. ToolStripControlHost提供了将第三方控件嵌入ToolStrip的能力. 我们可以用两种方式使用它:

一, 我们可以直接将继承自Control类的第三方控件作为ToolStripControlHost的构造函数的参数构造一个ToolStripControlHost实例, 将这个实例直接作为ToolStrip的Item加到ToolStrip的Items集合中使用即可.FreeEIM 每日健康多一点!
view sourceprint?1 private void Form2_Load(object sender, EventArgs e) 

2 { 

3     MonthCalendar monthCalendar = new MonthCalendar(); 

4     monthCalendar.FirstDayOfWeek = Day.Monday; 

5     this.toolStrip1.Items.Add(new ToolStripControlHost(monthCalendar)); 

6 }

 

二, 从ToolStripControlHost派生, 在继承类默认参构造函数中将第三方控件作为参数调用基类的有参构造函数. 这种方式可以很容易的在继承类中暴露属性,方法和事件,便于访问.
实现步骤如下:

1, 扩展 ToolStripControlHost。实现一个调用传入所需控件的基类构造函数的默认构造函数。
 

view sourceprint?1 public ToolStripMonthCalendar() : base(new MonthCalendar()) 

2 { 

3   

4 }

 

2, 声明一个与包装控件相同类型的属性,并在属性访问器中返回 Control 作为正确类型的控件。
 

 

view sourceprint?1 public MonthCalendar MonthCalendarControl 

2 { 

3     get

4     { 

5         return base.Control as MonthCalendar; 

6     } 

7 }

 

3, 使用扩展类中的属性和方法公开包装控件的其他常用属性和方法。
view sourceprint?01 // Expose the MonthCalendar.FirstDayOfWeek as a property. 

02 public Day FirstDayOfWeek 

03 { 

04     get

05     { 

06          return this.MonthCalendarControl.FirstDayOfWeek; 

07     } 

08     set

09     { 

10         value = this.MonthCalendarControl.FirstDayOfWeek; 

11     } 

12 } 

13    

14   

15 // Expose the AddBoldedDate method. 

16 public void AddBoldedDate(DateTime dateToBold) 

17 { 

18      this.MonthCalendarControl.AddBoldedDate(dateToBold); 

19 }

 

4, 也可以选择重写 OnSubscribeControlEvents 和 OnUnsubscribeControlEvents 方法,并添加要公开的控件事件。
view sourceprint?01 // Subscribe and unsubscribe the control events you wish to expose. 

02 protected override void OnSubscribeControlEvents(Control c) 

03 { 

04     // Call the base so the base events are connected. 

05     base.OnSubscribeControlEvents(c); 

06   

07     // Cast the control to a MonthCalendar control. 

08     MonthCalendar monthCalendarControl = (MonthCalendar)c; 

09   

10     // Add the event. 

11     monthCalendarControl.DateChanged += new DateRangeEventHandler(OnDateChanged); 

12 } 

13   

14 protected override void OnUnsubscribeControlEvents(Control c) 

15 { 

16     // Call the base method so the basic events are unsubscribed. 

17     base.OnUnsubscribeControlEvents(c); 

18    

19   

20     // Cast the control to a MonthCalendar control. 

21     MonthCalendar monthCalendarControl = (MonthCalendar)c; 

22   

23   

24     // Remove the event. 

25     monthCalendarControl.DateChanged -= new DateRangeEventHandler(OnDateChanged); 

26 }

 

5, 为要公开的事件提供必要的包装。
view sourceprint?01 // Declare the DateChanged event. 

02   

03 public event DateRangeEventHandler DateChanged; 

04           

05   

06 // Raise the DateChanged event. 

07   

08  private void OnDateChanged(object sender, DateRangeEventArgs e) 

09 { 

10     if (DateChanged != null) 

11     { 

12         DateChanged(this, e); 

13     } 

14 }

 

完整的示例请参见MSDN(http://freeeim.blog.sohu.com/).

 

如何提供设计时的支持
 

1, 为从ToolStripControlHost继承的类添加ToolStripItemDesignerAvailabilityAttribute标签.
 

它可以使ToolStrip在Design-Time下能够找到从ToolStripControlHost继承的第三方控件, 直接效果就是第三方控件在下拉菜单中可以直接列举出来. 另外,除了可以将第三方控件嵌入ToolStrip外, 我们还可以直接将第三方控件嵌入到ContextMenuStrip, MenuStrip和StatusStrip中.

ToolStripItemDesignerAvailability枚举成员如下:

成员名称
 说明
 
All
 指定所有控件均可见。
ContextMenuStrip
 指定 ContextMenuStrip 是可见的。
MenuStrip
 指定 MenuStrip 是可见的。
 
None
 指定无任何控件可见。
StatusStrip
 指定 StatusStrip 是可见的。
ToolStrip
 指定 ToolStrip 是可见的。

 

2, 为继承的控件添加ToolboxBitmapAttribute标签改变默认Icon.
 

view sourceprint?01 [ToolboxBitmap(typeof(MonthCalendar))] 

02 [DefaultProperty("Value")]  

03 [ToolStripItemDesignerAvailability( 

04     ToolStripItemDesignerAvailability.ContextMenuStrip | 

05     ToolStripItemDesignerAvailability.MenuStrip | 

06     ToolStripItemDesignerAvailability.StatusStrip | 

07     ToolStripItemDesignerAvailability.ToolStrip)] 

08 public class ToolStripMonthCalendar : ToolStripControlHost 

09 { 

10        //TODO: ...... 

11 }

 

The End

C# toolstrip 上添加 DateTimePicker Control控件 想学好C#的非常好的例子,高清晰自制PDF文件 立即下载

相关推荐

Easy ToolStrip-让您的UserControl显示超出容器/表单限制(C#和VB.NET)

在UserControl中实现ToolStripControlHost和ToolStripDropDown类的最简单方法是用很少的代码行显示超出其父容器和父窗体限制的容器/控件。 让我们简单一点...

【WinForm.NET开发】ToolStrip 控件体系结构

和类提供了一种灵活的可扩展系统,用于显示工具栏、状态和菜单项。这些类都包含在命名空间中 ,它们的名称通常都带有“ToolStrip”前缀(如)或“Strip”后缀(如。

Coding life, Coding world, Coding feature. 2374

ToolStripControlHost

ToolStripControlHost 用菜单来的样式来显示窗体 非常实用

在 ToolStrip 控件中使用工具提示

可以通过将控件的属性设置为true来为所需的控件显示。

Pei_hua100的专栏 581

KTransformers安装笔记 利用docker安装KTransformers

KTransformers安装笔记 利用docker安装KTransformers

guoqingru0311的博客 1562

2025年数学建模美赛(MCM)C题阅读与思考

2025年数学建模美赛(MCM)C题阅读与思考

carefreekid123的博客 7343

ToolStrip快速操作方法

1.分类(增加-Add,保存-Save,删除-Del,编辑-Edit,审核-Shenhe) private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { if (e.ClickedItem.Name.Contains("Add")) { FrmDingdanMx frm = new FrmDingdanM

weixin_40029679的博客 834

eLabRadio软件无线电虚实结合仿真开发平台简介

在使用仿真平台时,不要关闭设备或断开设备与PC机之间的网络连接,否则,仿真平台将无法正常工作。注:采用eNodeX设备认证方式,当出现“设备不存在”的报错时,请检查计算机IP是否和硬件设备IP处于同一网段,或者是否是先连接好网线,再开启硬件设备的。①此登录方式下,需要先建立软件与硬件的通信:在登录窗口点击【网络配置】,参照下图输入设备IP,服务器地址无需设置,设置完成后点击确认,此时登录界面无需设置账号密码;,拷贝到电脑上,使用管理员权限运行setup.exe,下一步直到安装完成,桌面会生成快捷方式。

weixin_55349105的博客 6320

WinForm之ToolStrip 组件

摘要:WinForm中的ToolStrip控件是创建工具栏的核心组件,支持多种工具项(按钮、下拉菜单、文本框等),具有灵活布局、自定义样式和事件处理能力。通过ImageList关联图标,可实现可视化操作入口,支持停靠/浮动布局提升用户体验。典型应用包括文档编辑快捷操作、数据管理和状态切换,需注意与MenuStrip的功能配合及动态更新逻辑。开发中需关注图标显示、布局适配等常见问题,通过属性设置和事件绑定构建高效工具栏系统。(149字)

weixin_66547608的博客 1414

信贷审批中的那些坑:从零开始搭建风控策略体系的5个关键步骤

本文深入探讨了信贷审批中的风控策略体系搭建,从数据陷阱识别、规则冲突诊断到反欺诈攻防,提供了5个关键步骤的实战指南。重点解析了如何通过特征工程、决策树优化和模型可解释性技术,构建动态平衡的风控体系,有效降低逾期风险并提升审批效率。

weixin_29253711的博客 416

别再死记硬背注意力机制了!用Python+PyTorch从零实现一个HAN(Hierarchical Attention Network)

本文详细介绍了如何使用Python和PyTorch从零实现Hierarchical Attention Network(HAN),通过代码级解析帮助读者深入理解层次注意力机制。文章涵盖词级和句子级注意力层的构建、完整HAN架构的实现、训练技巧及注意力可视化方法,特别适合希望掌握高级NLP技术的开发者。

weixin_28744423的博客 165

Winform下ToolStrip承载自定义控件或 Windows 窗体控件。

如题,使用ToolStripControlHost。 先看MSDN上介绍的: ToolStripControlHost  是 ToolStripComboBox、ToolStripTextBox 和 ToolStripProgressBar 的抽象基类。 ToolStripControlHost  可以通过两种方法承载其他控件(包括自定义控件): •从派生自 Control 的类

yuankaiwsl的博客 5154

STM32:TTL串口调试

TTL只需要两个线就可以完成两个设备之间的双向通信,一个发送电平的I/O称之为TX,与另一个设备的接收I/O口RX相互连接。两设备之间还需要连接地线(GND),这样两设备就有相同的0V参考电势。

superSmart_Dong的博客 5641

C#toolStrip使用

1、添加toolStrip控件 2、属性栏中将显示方式改为以下属性 3、增加选项卡时选择Button,双击Button就可以编辑事件了

Guarder_7的博客 1844

Multisim14安装失败?手把手教你彻底清理残留文件(附专用卸载工具)

本文针对Multisim14安装失败问题,提供了一套从根源解决的完整方案。文章详细分析了安装失败的三大元凶——文件残留、注册表残留和隐藏组件,并手把手指导用户使用专用卸载工具进行标准化清理,再结合手动深度清理文件系统和注册表,最终实现彻底卸载和完美重装,有效解决Multisim14安装问题。

weixin_29179311的博客 317

MYSQL、ORACLE、PostgreSQL数据库对象层次及权限管理对比

本文为出于自己扩展、比较、图形化的思维路径自行总结归纳,可能有些细节不太准确,欢迎指正。MySQL、Oracle、PostgreSQL关系型数据库都有管理员用户、用户、权限管理、表函数索引等数据库对象,schema。但在数据库对象隶属层次上有差异和相同的地方。

rachel_2016的博客 1490

8.3.4 ToolStrip(工具栏)控件

5、Separator,对应ToolStripSeparator类型,分隔符,常用作相似功能工具的区域界线。2、Label:对应ToolStripLabel类型,标签,类似于普通的Label控件,但是支持显示图片。6、ComboBox:对应ToolStripComboBox类型,组合框,类似于普通的ComboBox。7、TextBox:对应ToolStripTextBox类型,文本框,类似于普通的TextBox。1、Button:对应ToolStripButton类型,按钮,类似于普通的 Button。

学习微软 .net 技术开发 1772

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

在工具栏中添加自定义控件

在菜单(MenuStrip)、工具栏(ToolStrip)、状态栏(StatusStrip)上,已经可以显示输入框(TextBox)、组合框(ComboBox)等控件,但很多时候,我们想显示我们自定义的一些控件和WinForm自带的其他一些控件,这个需求我们怎么实现呢?接下来就通过一个例子来详细的介绍实现这个需求的方法。 下面,就来介绍怎样一步步的实现在菜单(MenuStrip...

522

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

winform常用控件的使用总结(toolStrip、toolTip、splitContainer、获取鼠标位置)

一、toolStrip 工具栏默认状态下太小,上面的ToolStripButtun的图片也很小,如何将其放大到一个合适的大小。 1、放大toolStrip (1)将AutoSize的设置为false (2) 通过修改Size修改大小 2、修改 ToolStripButtun的大小 (1)选择 ToolStripButtun  AutoSize设为false (2) 修改S...

灰太狼的小秘密 6852

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C# 控件基础1 | 从多态角度理解、遍历菜单栏控件ToolSplit

今天在整理以前程序时,优化中英文切换功能,有感而发的一篇文章。ToolSplit是使用多态实现的,理解它就能很好地理解多态。ToolSplit是微软封装好的控件,原则上我们只是应用层面的开发,而我们不能止步于应用,更要了解轮子是怎么造的.应用需要了解开发原理,开发需要自己去应用,才能在自己的能力发挥到极致。而在遍历中,必须知道遍历的项是什么类型,所以刚好能让我们实践加深理解继承派生:基本是所以控件的直接或间接父类功能: 定义控件的基类,控件是带有可视化表示形式的组件。线程安全。

a1062484747的博客 1562
上一篇: XPS文档阅读器
下一篇: 飞鸽传书:造假与成功
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值