星期五, 7月 09, 2021

[C#] 透過 ToolStripControlHost 自訂 ToolStripItem

根據 作法:使用 ToolStripControlHost 包裝 Windows Forms 控制項 的筆記,該篇是把 MonthCalendar 標準控件塞進 ToolStripItem 內,有註冊公開的 DateChanged 事件來把結果傳回 TextBox 上,效果如下圖

[C#] 透過 ToolStripControlHost 自訂 ToolStripItem

建構子是最重要部分,因為要把 MonthCalendar 傳給 ToolStripControlHost
using System;
using System.Windows.Forms;

namespace UCToolStripControlHost
{
    public class ToolStripMonthCalendar : ToolStripControlHost
    {
        // 把 MonthCalendar 傳進 ToolStripControlHost 建構子
        public ToolStripMonthCalendar() : base(new MonthCalendar())
        {

        }

        public MonthCalendar MonthCalendarControl
        {
            get
            {
                return Control as MonthCalendar;
            }
        }

        // 公開 FirstDayOfWeek 屬性
        public Day FirstDayOfWeek
        {
            get
            {
                return MonthCalendarControl.FirstDayOfWeek;
            }
            set 
            {
                MonthCalendarControl.FirstDayOfWeek = value;
            }
        }

        // 公開 AddBoldedDate 方法
        public void AddBoldedDate(DateTime dateToBold)
        {
            MonthCalendarControl.AddBoldedDate(dateToBold);
        }

        // 公開 DateChanged 事件
        public event DateRangeEventHandler DateChanged
        {
            add { MonthCalendarControl.DateChanged += value; }
            remove { MonthCalendarControl.DateChanged -= value; }
        }
    }
}
在 Form 內把自訂的 ToolStripMonthCalendar 塞進 MenuStrip 上使用,MenuStrip 和 ToolStripMenuItem 是直接拖曳建立上 Form 的
using System;
using System.Windows.Forms;

namespace UCToolStripControlHost
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            ToolStripMonthCalendar monthCalendar = new ToolStripMonthCalendar();
            toolStripMenuItem1.DropDownItems.Add(monthCalendar);
            monthCalendar.DateChanged += (sender, e) =>
            {
                txtStartDate.Text = e.Start.ToString();
            };
        }
    }
}

沒有留言:

張貼留言