如题,使用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 窗体控件。相关推荐

  1. C#实现渐变颜色的Windows窗体控件

    C#实现渐变颜色的Windows窗体控件! 1,定义一个BaseFormGradient,继承于System.Windows.Forms.Form 2,定义三个变量: private Color _C ...

  2. 在IE浏览器中使用Windows窗体控件(三)

    调试Windows窗体控件 要调试窗体控件,你需要按照下面步骤进行. 1.打开浏览器并请求包含窗体控件的那个Html页面. 2.打开visual Studio.Net同时选择工具->调试进程就会 ...

  3. c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。...

    首先来看传统方法: public partial class Form1 : Form{public Form1() { InitializeComponent(); } private void F ...

  4. c#中如何跨线程调用windows窗体控件?

    我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍. 首先来看传统方法: public partial ...

  5. Qt/C++编写自定义控件48-面板窗体控件

    一.前言 很多时候需要有一个控件,能够替代容器控件,自动容纳多个widget,自适应宽高,然后提供滚动条功能,这就必然需要用到QScrollArea控件,可设置各个子面板的间距等,也在很多系统中用到, ...

  6. winformbutton边框怎么改_C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法

    C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法 1.新建组件这里可以自定义一个Panel控件起名为PanelEx 2.增加一个BoderColor属性和BoderSize属性 pr ...

  7. 使用 .NET 框架轻松开发完美的 Web 窗体控件

    作者:David S. Platt   出自:微软 本文假定您熟悉 Visual Basic .NET.C# 和 HTML 下载本文的代码: WebC.exe (274KB) 摘要 预建的自定义控件可 ...

  8. c# vs2005 多线程中调用窗体控件 (摘)

    Vs 2003用多了,装了VS 2005就有点用不习惯了,以前在2003里面不会因为在线程里面对其它线程中的控件进行操作而报错,到了2005这个就变成一个异常了,不过这也是为了线程之间的安全性,所以只 ...

  9. KRBTabControl(中文)Windows选项卡控件

    本文阐述了如何在C#使自定义Windows选项卡控件. Download demo project - 82.4 KB Download source - 252 KB 介绍 本文讨论如何使用.NET ...

最新文章

  1. vs2008中,创建基于对话框的mfc动态库步骤
  2. 【模拟退火】解决【TSP】问题
  3. mac iterm2快捷键
  4. 【转】用nohup命令让Linux下程序永远在后台执行
  5. servlet的体系结构
  6. 探索篇 | 接口字段容错测试(三)
  7. Scala in depth 6 Scala的类型系统 中
  8. IT职业生涯中的必修课
  9. gRPC python封装深度学习算法教程
  10. compoundbutton调用setChecked触发onCheckedChanged的终极解决方案;
  11. python古诗代码案例_一行代码竟然如此逆天?小码王python案例首次对外展现!
  12. Excise_day02
  13. 手把手教你建立私人数据检索库(二)
  14. Python3脚本抢票
  15. python黑魔法指南_python黑魔法一天从那个入门到进阶
  16. Notification和NotificationManagerService原理解析
  17. -2岁的产品经理学习日记2020/2/15
  18. 移动应用测试与PC端测试区别
  19. SEO技巧:Meta标签详解
  20. 史上最硬核网页截图方案原理深度剖析

热门文章

  1. 解决Unable to find the module utility `modprobe`错误
  2. Ubuntu18.04安装opencv3.4.1和opencv_contrib3.4.1时遇到错误处理方法
  3. java解压在线tgz文件
  4. 推荐引擎上策略的步骤以及查bug的方法
  5. FA-Oracle ERP 资产模块的非常规功能探讨
  6. netcat工具简单使用
  7. 网格设计版式设计_网页设计展示精美的版式
  8. git push和 git pull的使用
  9. vue本地的模糊匹配
  10. java安装安装jdk,配置环境变量