首页 > 其他分享 >如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持

如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持

时间:2024-03-19 16:44:34浏览次数:24  
标签:控件 MonthCalendar event base Design ToolStrip DateChanged public

ToolStripControlHost 旨在通过使用 ToolStripControlHost 构造函数或扩展 ToolStripControlHost 本身来启用任意 Windows 窗体控件的承载。通过扩展 ToolStripControlHost 并实现公开控件的常用属性和方法的属性和方法,可以更轻松地包装控件。还可以在 ToolStripControlHost 级别公开控件的事件。

通过派生在 ToolStripControlHost 中承载控件

  1. 扩展 ToolStripControlHost。实现一个无参数构造函数,该构造函数调用传入所需控件的基类构造函数。

    // Call the base constructor passing in a MonthCalendar instance.
    public ToolStripMonthCalendar() : base (new MonthCalendar()) { }
    
  2. 声明与包装控件类型相同的属性,并在属性的访问器中返回为正确类型的控件。Control

    public MonthCalendar MonthCalendarControl
    {
        get
        {
            return Control as MonthCalendar;
        }
    }
    
  3. 使用扩展类中的属性和方法公开包装控件的其他常用属性和方法。

    // 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);
    }
    
  4. (可选)重写 OnSubscribeControlEvents 和 OnUnsubscribeControlEvents 方法,并添加要公开的控件事件。

    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);
    }
    
  5. 为要公开的事件提供必要的包装。

    // 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);
        }
    }
    

//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 和 System.Windows.Forms 程序集的引用。

另请参阅

标签:控件,MonthCalendar,event,base,Design,ToolStrip,DateChanged,public
From: https://www.cnblogs.com/soliang/p/18083333

相关文章

  • XReport通过数据控制控件是否打印
    需求场景:医嘱单在患者出院的时候,需要标记一条红线,表示以下没有医嘱了。数据库中此记录的一个字段属性isRed值来标记这一行。 实现:XReport报表的明细区域增加一个line1对象。然后在明细表格带区添加如下事件代码,就可以实现这条线的可见打印输出通过数据集的属性控制了。priva......
  • element plus DateTimePicker控件选择日期不选时间,默认是0点,但是获取到的时间不一致
    只选择日期,未选择时间,应默认是0点 保存入库后时间变为16点 查看官方文档后,给控件设置这个属性即可value-format="YYYY-MM-DDHH:mm:ss" ......
  • MvvmLight中,两个依赖属性的值发生变化时影响第三个控件属性的用法
    使用数据绑定配合IValueConverter(值转换器)创建一个自定义转换器,该转换器接收两个输入值,并根据他们是否相等返回相应的输出值。然后将这个转换器应用到第三个控件的属性上1publicclassEqualityToTextConverter:IValueConverter2{3publicobjectConvert(o......
  • WPF —— TabControl、StackPanel 控件详解
    1TabControl简介表示包含多个项的控件,这些项共享屏幕上的同一空间。TabControl有助于最大程度地减少屏幕空间使用量,同时允许应用程序公开大量数据。 TabControl包含共享同一屏幕空间的多个TabItem对象。一次只能看到TabControl中的一个 TabItem。当用户选择的Tab......
  • WPF —— ListBox控件、GroupBox控件详解
    1、ListBox介绍  ListBox是一个ItemsControl,这意味着它可以包含任何类型的对象的集合(,例如字符串、图像或面板)。  一个ListBox中的多个项是可见的,与仅ComboBox具有所选项可见的项不同,除非IsDropDownOpen属性为true。该SelectionMode属性确定一次是否......
  • Vue+OpenLayers7入门到实战:OpenLayers7创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼
    返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战前言本章介绍如何使用OpenLayers7在地图上创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。二、依赖和使用"ol":"7.5.2"使用npm安装依赖[email protected]使用Y......
  • OpenLayers6实战,OpenLayers创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、
    专栏目录:OpenLayers实战进阶专栏目录前言本章讲解OpenLayers6如何创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小和文字和按钮等自定义样式的功能。二、依赖和使用"ol":"^6.15.1"使用npm安装依赖[email protected]使用Yarn安装依赖yarn......
  • Qt 布局中控件重叠、挤压的解决方法
    问题描述:在QtDesigner中设计布局时,对所有控件使用QGridLayout、QHBoxLayout或QVBoxLayout布局设置。可以正常预览(Preview),但C++编译后,所有控件挤到一起,布局设置失效。问题解析:预览时正常,说明不是Qt的问题,应该与C++代码有关。问题解决:查看与ui关联的代码,发现这个......
  • 【VC++学习笔记】控件及按钮的设置和使用
    1:按钮的使能与禁止用ClassWizard的MemberVariables为按钮定义变量,如:m_Button1;则m_Button1.EnableWindow(true);使按钮处于允许状态m_Button1.EnableWindow(false);使按钮被禁止,并变灰显示2:控件的隐藏与显示用CWnd类的函数BOOLShowWindow(intnCmdShow)可以隐藏或显示......
  • ant design vue动态显示隐藏表格列字段,支持记忆功能
    本文档内容下载:动态显示隐藏表格列字段,支持记忆功能.docx.zip:​​https://url37.ctfile.com/f/8850437-1036113839-678952?p=4760​​(访问密码:4760)链接:​​https://caiyun.139.com/m/i?135CdoJGCdpkg​​新版本以及新版本代码生成,会自动增加该功能,无需额外修改。仅......