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

原创 2016年07月05日 14:42:57


如题,使用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一样!


版权声明:本文为博主原创文章,未经博主允许不得转载。

ToolStrip添加任意控件实现

在ToolStrip上是可以添加任意控件的 使用ToolStripControlHost类来实现 例如 :添加一个NumbericUpDown控件 NumericUpDo...

C#实现windowsfrom界面美化

美化之前:  美化后:    具体代码: private Bitmap BP;        public struct Form4Show        {            public Co...

【转】C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部

PS:文末的附件已更新,这次我放到博客园里面了,不会弹出广告,放心下载,O(∩_∩)O谢谢! 这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入到自己开发的窗体中来,看起来就像...

C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部

资源里有例子:http://download.csdn.net/detail/small5e4444/4821582 这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入...

WinForm窗体中ComboBox控件自定义高度和选项文本居中、选项高亮

转自:http://m.blog.csdn.net/wangzl1163/article/details/74932668 WinForm窗体中的ComboBox控件是有TextBox控件和List...

WinForm窗体中ComboBox控件自定义高度和选项文本居中、选项高亮

WinForm窗体中的ComboBox控件是有TextBox控件和ListBox控件组合而成,其本身是不能自定义高度的只能根据字体的大小而自动生成高度。另外,选中后的选项文本在ComboBox中显示默...

C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部

好久没有上来了,今天一看,问题不少啊。主要是关于 之前发的一个文章“C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部” 原网址"http://blog.csdn.net/small5e44...

向ToolStrip、MenuStrip、StatusStrip中添加自定义控件

新版framework引入了ToolStrip(代替ToolBar)、MenuStrip(代替MenuBar)、StatusStrip(代替StatusBar)这些新控件,虽然旧控件还被支持,但也只是...

C#自定义窗体元素控件库

  • 2015年11月06日 09:40
  • 2.85MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Winform下ToolStrip承载自定义控件或 Windows 窗体控件。
举报原因:
原因补充:

(最多只允许输入30个字)