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
  • 相关阅读:
    《滑动到顶部悬浮功能条》源代码学习整理笔记
    eclipse中Build Path-Add to Build Path相应到androidstudio的设置
    UML视图(九)部署图
    ios 字典转模型
    Centos 6.5使用Bumblebee关闭N卡,冷却你的电脑
    oracle if then else
    setAnimationTransition:forView:cache: 运行动画时背景色问题
    数据恢复软件使用经验-支持U盘,手机SD卡,硬盘数据,解决图片恢复后打不开的问题
    ZOJ1109_Language of FatMouse(STL/map)
    navicat中文破解版,navicat破解版,navicat for mysql10.0.11简体中文破解版
  • 原文地址:https://www.cnblogs.com/adodo1/p/4328072.html
Copyright © 2011-2022 走看看