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
  • 相关阅读:
    iPhone X 适配手机端 H5 页面通用解决方案
    创建cordova项目
    UltraEdit mac破解版
    ionic 和cordova的区别是什么
    还在为AndroidStudio的Gradle版本配置头疼?看看老司机的解决方法吧
    java final
    死锁产生的条件+排除死锁的方法
    String str=new String("a")和String str = "a"有什么区别?
    重载和覆盖的区别?(overload vs override)
    深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327349.html
Copyright © 2011-2022 走看看