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动态添加自定义控件

ToolStripControlHost dateTimePickerHost; private void InitializeDateTimePickerHost() {     // Create...

ToolStrip添加任意控件实现

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

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

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

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

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

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

  • 2015-11-06 09:40
  • 2.85MB
  • 下载

C#Windows窗体界面设计_05_自定义函数 外部类访问读写窗体类的控件的私有属性

binzhouweichao@163.com 2013-10-17 仍然沿用前面所使用的项目。 参考: 访问控件私有属性:http://bbs.csdn.net/topics/40412507 静态类...

VB 自定义控件 窗体特效

  • 2009-08-26 10:45
  • 4.26MB
  • 下载

C#自定义控件实现窗体绘制表格

C#自定义控件
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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