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
  • 相关阅读:
    常见数据结构和算法 的可视化
    JSON与XML
    JavaScript 中的陷阱
    C++ primer(十三)--类继承、构造函数成员初始化、虚函数、抽象基类
    mongodb学习(二)
    再谈怎样以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式
    LaTeX Subfigure 中间加入垂直线
    JAVA基础针对自己薄弱环节总结02(循环)
    软考之路--用文字记录这个漂亮的进程
    mysql异常Lock wait timeout exceeded; try restarting transaction
  • 原文地址:https://www.cnblogs.com/adodo1/p/4328072.html
Copyright © 2011-2022 走看看