zoukankan      html  css  js  c++  java
  • Adding controls to ToolStrip in C#

    http://someuser77.com/guides/adding-controls-to-toolstrip/   Adding controls to ToolStrip in C# The ToolStrip control is capable of holding some common controls that comes with the .NET framework such as the ToolStripButton, the ToolStripComboBox and several others. What about adding a non standard control such as a CheckBox or a MonthCalendar? Using the ToolStripControlHost one can do exactly this. As it is stated in the MSDN article How to: Wrap a Windows Forms Control with ToolStripControlHost you should derive from the ToolStripControlHost class: public classToolStripCheckBox : ToolStripControlHost { public ToolStripCheckBox() : base(newCheckBox()) { } } now the CheckBox can be added to the ToolStrip using: ToolStripCheckBox toolStripCheckBox = newToolStripCheckBox(); toolStrip1.Items.Add((ToolStripItem)toolStripCheckBox); And the CheckBox properties and events can be accessed using: (toolStripCheckBox.Control asCheckBox).Text = "CheckBox"; (toolStripCheckBox.Control asCheckBox).CheckedChanged += (sender, e) => MessageBox.Show((sender asCheckBox).Checked.ToString()); To remove the casting from the user code and since C# does not supportmultiple inharitance it is suggested to incapsulate all the commonmethods and properties of CheckBox: publicCheckBox CheckBoxControl { get { return Control asCheckBox; } } publicbool Checked { get { return CheckBoxControl.Checked; } set { CheckBoxControl.Checked = value; } } so now you can write: toolStripCheckBox.CheckBoxControl.Text = "CheckBox"; toolStripCheckBox.CheckBoxControl.CheckedChanged += (sender, e) => MessageBox.Show((sender asCheckBox).Checked.ToString()); finally provide the events you wish to access directly from the ToolStripControlHost: public eventEventHandler CheckedChanged; public void OnCheckedChanged(object sender, EventArgs e) { if (CheckedChanged != null) { CheckedChanged(this, e); } } protectedoverridevoid OnSubscribeControlEvents(Control control) { base.OnSubscribeControlEvents(control); (control asCheckBox).CheckedChanged += OnCheckedChanged; } protectedoverridevoid OnUnsubscribeControlEvents(Control control) { base.OnUnsubscribeControlEvents(control); (control asCheckBox).CheckedChanged -= OnCheckedChanged; } or if you want that the CheckedChanged event will hold the CheckBox as the sender instead of the ToolStripCheckBox replace: public void OnCheckedChanged(object sender, EventArgs e) { if (CheckedChanged != null) { CheckedChanged(this, e); } } with: public void OnCheckedChanged(object sender, EventArgs e) { if (CheckedChanged != null) { CheckedChanged(sender, e); } } so now you can write: toolStripCheckBox.CheckedChanged += (sender, e) => MessageBox.Show((sender asToolStripCheckBox).Checked.ToString()); finally if you wish to add the control to the toolstrip in the designer add the ToolStripItemDesignerAvailability Attribute to the ToolStripCheckBox class: [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip)] public classToolStripCheckBox : ToolStripControlHost { ... now you can select the CheckBox from the designer by right clicking the toolstrip and selecting 'Edit Items...' and even view the exposed event in the control properties: The c
  • 相关阅读:
    【TIDB】2、TIDB进阶
    【TIDB】1、TiDb简介
    【Tair】淘宝分布式NOSQL框架:Tair
    【ElasticSearch】查询优化
    【高并发解决方案】9、大流量解决方案
    【高并发解决方案】8、Nginx/LVS/HAProxy负载均衡软件的优缺点详解
    【JVM】jdk1.8-jetty-swap被占满问题排查
    【JVM】记录一次线上SWAP偏高告警的故障分析过程
    【JVM】内存和SWAP问题
    【MySQL】mysql索引结构及其原理
  • 原文地址:https://www.cnblogs.com/adodo1/p/4328072.html
Copyright © 2011-2022 走看看