Winform下ToolStrip承载自定义控件或 Windows 窗体控件。
如题,使用ToolStripControlHost。
先看MSDN上介绍的:
ToolStripControlHost 是 ToolStripComboBox、ToolStripTextBox 和 ToolStripProgressBar 的抽象基类。 ToolStripControlHost 可以通过两种方法承载其他控件(包括自定义控件):
•从派生自 Control 的类构造 ToolStripControlHost。 要完全访问寄宿的控件和属性,必须将 Control 属性强制转换回它所表示的实际类。
•扩展 ToolStripControlHost,并在继承类的默认构造函数中,调用基类构造函数并传递一个从 Control 派生的类。 此选项允许您对公共控件方法和属性进行包装,以使 ToolStrip 中的访问更加容易。
使用 ToolStripControlHost 类承载自定义控件或任何其他 Windows 窗体控件。
若要自定义 ToolStripItem,请从 ToolStripControlHost 进行派生,并创建自定义实现。 可以重写 OnSubscribeControlEvents 等方法,以处理由寄宿的控件引发的事件,也可以在属性中增加自定义功能,以增强寄宿的控件。
第一种方法,写个比较简单的例子:
var panel = new FlowLayoutPanel();
panel.FlowDirection = FlowDirection.BottomUp;
panel.Controls.Add(new Button() { Text = "你你你你" });
panel.Controls.Add(new Button() { Text = "你你你你" });
ToolStripControlHost host = new ToolStripControlHost(panel);
toolStrip1.Items.Add(host);
运行结果:
So Easy!
第二种方法,可以借鉴MSDN上的例子:
//Declare a class that inherits from ToolStripControlHost.public class ToolStripMonthCalendar : ToolStripControlHost{// Call the base constructor passing in a MonthCalendar instance.public ToolStripMonthCalendar() : base (new MonthCalendar()) { }public MonthCalendar MonthCalendarControl{get{return Control as MonthCalendar;}}// Expose the MonthCalendar.FirstDayOfWeek as a property.public Day FirstDayOfWeek{get{return MonthCalendarControl.FirstDayOfWeek;}set { MonthCalendarControl.FirstDayOfWeek = value; }}// Expose the AddBoldedDate method.public void AddBoldedDate(DateTime dateToBold){MonthCalendarControl.AddBoldedDate(dateToBold);}// Subscribe and unsubscribe the control events you wish to expose.protected override void OnSubscribeControlEvents(Control c){// Call the base so the base events are connected.base.OnSubscribeControlEvents(c);// Cast the control to a MonthCalendar control.MonthCalendar monthCalendarControl = (MonthCalendar) c;// Add the event.monthCalendarControl.DateChanged +=new DateRangeEventHandler(OnDateChanged);}protected override void OnUnsubscribeControlEvents(Control c){// Call the base method so the basic events are unsubscribed.base.OnUnsubscribeControlEvents(c);// Cast the control to a MonthCalendar control.MonthCalendar monthCalendarControl = (MonthCalendar) c;// Remove the event.monthCalendarControl.DateChanged -=new DateRangeEventHandler(OnDateChanged);}// Declare the DateChanged event.public event DateRangeEventHandler DateChanged;// Raise the DateChanged event.private void OnDateChanged(object sender, DateRangeEventArgs e){if (DateChanged != null){DateChanged(this, e);}}}
调用和System.Windows.Forms.ToolStripComboBox、System.Windows.Forms.ToolStripProgressBar、System.Windows.Forms.ToolStripTextBox一样!
Winform下ToolStrip承载自定义控件或 Windows 窗体控件。相关推荐
- C#实现渐变颜色的Windows窗体控件
C#实现渐变颜色的Windows窗体控件! 1,定义一个BaseFormGradient,继承于System.Windows.Forms.Form 2,定义三个变量: private Color _C ...
- 在IE浏览器中使用Windows窗体控件(三)
调试Windows窗体控件 要调试窗体控件,你需要按照下面步骤进行. 1.打开浏览器并请求包含窗体控件的那个Html页面. 2.打开visual Studio.Net同时选择工具->调试进程就会 ...
- c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。...
首先来看传统方法: public partial class Form1 : Form{public Form1() { InitializeComponent(); } private void F ...
- c#中如何跨线程调用windows窗体控件?
我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍. 首先来看传统方法: public partial ...
- Qt/C++编写自定义控件48-面板窗体控件
一.前言 很多时候需要有一个控件,能够替代容器控件,自动容纳多个widget,自适应宽高,然后提供滚动条功能,这就必然需要用到QScrollArea控件,可设置各个子面板的间距等,也在很多系统中用到, ...
- winformbutton边框怎么改_C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法
C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法 1.新建组件这里可以自定义一个Panel控件起名为PanelEx 2.增加一个BoderColor属性和BoderSize属性 pr ...
- 使用 .NET 框架轻松开发完美的 Web 窗体控件
作者:David S. Platt 出自:微软 本文假定您熟悉 Visual Basic .NET.C# 和 HTML 下载本文的代码: WebC.exe (274KB) 摘要 预建的自定义控件可 ...
- c# vs2005 多线程中调用窗体控件 (摘)
Vs 2003用多了,装了VS 2005就有点用不习惯了,以前在2003里面不会因为在线程里面对其它线程中的控件进行操作而报错,到了2005这个就变成一个异常了,不过这也是为了线程之间的安全性,所以只 ...
- KRBTabControl(中文)Windows选项卡控件
本文阐述了如何在C#使自定义Windows选项卡控件. Download demo project - 82.4 KB Download source - 252 KB 介绍 本文讨论如何使用.NET ...
最新文章
- vs2008中,创建基于对话框的mfc动态库步骤
- 【模拟退火】解决【TSP】问题
- mac iterm2快捷键
- 【转】用nohup命令让Linux下程序永远在后台执行
- servlet的体系结构
- 探索篇 | 接口字段容错测试(三)
- Scala in depth 6 Scala的类型系统 中
- IT职业生涯中的必修课
- gRPC python封装深度学习算法教程
- compoundbutton调用setChecked触发onCheckedChanged的终极解决方案;
- python古诗代码案例_一行代码竟然如此逆天?小码王python案例首次对外展现!
- Excise_day02
- 手把手教你建立私人数据检索库(二)
- Python3脚本抢票
- python黑魔法指南_python黑魔法一天从那个入门到进阶
- Notification和NotificationManagerService原理解析
- -2岁的产品经理学习日记2020/2/15
- 移动应用测试与PC端测试区别
- SEO技巧:Meta标签详解
- 史上最硬核网页截图方案原理深度剖析
热门文章
- 解决Unable to find the module utility `modprobe`错误
- Ubuntu18.04安装opencv3.4.1和opencv_contrib3.4.1时遇到错误处理方法
- java解压在线tgz文件
- 推荐引擎上策略的步骤以及查bug的方法
- FA-Oracle ERP 资产模块的非常规功能探讨
- netcat工具简单使用
- 网格设计版式设计_网页设计展示精美的版式
- git push和 git pull的使用
- vue本地的模糊匹配
- java安装安装jdk,配置环境变量