[VB.Net] PobaMonthCalendar

微軟本身有提供 MonthCalendar 可以操作,但對於開發者而言,所提供的功能太少。舉例而言,若想在指定(非週期性)的日期上做特別顯示,微軟提供的 MonthCalendar 僅能改變 BoldedDates,換言之,日期只能決定是否以粗體表示,而背景顏色、字體顏色等皆無法做更改。正當筆者邊爬文邊思考是否要時做一個 UserControl 時,意外地發現第三方的 MonthCalendar:PobaMonthCalendar。

圖 1 PobaMonthCalendar

PobaMonthCalendar 是由國外的作者 Patrik Bohman 於 29th June, 2005 產出(Version 1.0.0.0),在開發後仍持續更新到 16th August, 2006(Version 1.8.2),也就是目前的最新版本。雖然在外觀上 PobaMonthCalendar 相較於微軟所提供的為之遜色,但高度自由即是他的勝出關鍵。

在這份 CodeProject 中,作者提供兩份 Demo(基於不同的 .NET Framework)並皆釋出 Source Code,文章中對於其 Properties、Events 或 Methods 皆有非常詳細的說明,請參考 PobaMonthCalendar 的 CodeProject 頁面。

而這篇文章主要是筆記如何將第三方 UserControl 加入至工具箱內,並稍微介紹 PobaMonthCalendar 的使用方法。筆者所使用的 IDE 為 VS2015 版本。

首先先開啟一個 WindowsFormApplication Project,接著來到設計畫面,叫出工具箱側欄並對標籤按下右鍵選擇「選擇項目」。

圖 2 進入選擇項目


在 .NET Framework 元件的標籤下按下瀏覽,並加入由 CodeProject 所下載的 Demo 中的MonthCalendar.dll。確認加入至 .NET Framework 元件後按下確定,之後就會發現 PobaMonthCalendar 已經出現在工具箱囉。

圖 3 確認加入 PobaMonthCalendar

圖 4 MonthCalendar 已加入至工具箱成功

以上就是如何將第三方 MonthCalendar 加入至工具箱的方法。而已加入的 MonthCalendar 和其他元件一樣,可以藉由拖曳、拉放來調整控制項外觀。


PobaMonthCalendar 中 Layout 主要分為五個部分:
  • Header 標題
  • Weekdays 星期數
  • Weeknumbers 週數
  • Month 日期區
  • Footer 頁腳
圖 5 PobaMonthCalendar Layout


PobaMonthCalendar 提供豐富的外觀屬性可以做設置:
  • BorderColor: 表示 MonthCalendar 的色彩
  • ShowFooter: 表示是否顯示 MonthCalendar 下方的頁腳,預設為 True
  • ShowHeader: 表示是否顯示 MonthCalendar 上方的標頭,預設為 True
  • BorderStyle: 表示 MonthCalendar 的樣式
  • ShowToday: 表示是否標記(Mark)當天,預設為 True
  • ShowWeekdays: 表示是否顯示 MonthCalendar 上方的星期數欄,預設為 True
  • ShowWeeknumbers: 表示是否顯示 MonthCalendar 左方的週數欄,預設為 False
  • TodayColor: 表示標記當天色彩的顏色

在 PobaMonthCalendar 中,我們可以利用副程式來設定指定日期的字體與顏色:
    ''' <summary>
''' 設定 [MonthCalendar] 中指定日期處的文字樣式
''' </summary>
''' <param name="[MonthCalendar]">目標 MonthCalendar</param>
''' <param name="[Date]">欲變更之指定日期</param>
''' <param name="[DateColor]">欲設定之色彩</param>
''' <param name="[BoldedDate]">是否以粗體顯示</param>
Private Sub SetMcBoldedDates(ByVal [MonthCalendar] As Pabo.Calendar.MonthCalendar,
                             ByVal [Date] As DateTime,
                             ByVal [DateColor] As Color,
                             ByVal [BoldedDate] As Boolean)
    Dim di As New Pabo.Calendar.DateItem
    di.Date = [Date]
    di.DateColor = [DateColor]
    di.BoldedDate = [BoldedDate]
    [MonthCalendar].AddDateInfo(di)
End Sub

若想要重繪 PobaMonthCalendar,可利用 ResetDateInfo 方法來還原 PobaMonthCalendar 的所有字體與顏色配置。
[MonthCalendar].ResetDateInfo()

當使用者變更 PobaMonthCalendar 中所選取的日期時,會引發 DaySelected 事件。若要獲取 PobaMonthCalendar 中選取的日期,可以從 SelectedDates 的得到。PobaMonthCalendar.SelectedDates() 會回傳使用者在 PobaMonthCalendar 所選取的 DateTime 集合。
For Each [SelectedDate] As DateTime In MonthCalendar1.SelectedDates
    Console.WriteLine([SelectedDate].ToString)
Next

留言

這個網誌中的熱門文章