MonthCalendar 类

表示一个 Windows 控件,该控件使用户能够使用可视月历显示来选择日期。

**命名空间:**System.Windows.Forms
**程序集:**System.Windows.Forms(在 system.windows.forms.dll 中)

语法

声明
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)> _
Public Class MonthCalendar
    Inherits Control
用法
Dim instance As MonthCalendar
[ComVisibleAttribute(true)] 
[ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)] 
public class MonthCalendar : Control
[ComVisibleAttribute(true)] 
[ClassInterfaceAttribute(ClassInterfaceType::AutoDispatch)] 
public ref class MonthCalendar : public Control
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) */ 
public class MonthCalendar extends Control
ComVisibleAttribute(true) 
ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) 
public class MonthCalendar extends Control

备注

MonthCalendar 控件允许用户使用可视显示来选择日期。通过设置 MinDateMaxDate 属性,可以限制可选择的日期和时间。

通过设置 ForeColorFontTitleBackColorTitleForeColorTrailingForeColorBackColor 属性,可以更改控件日历部分的外观。

MonthCalendar 控件由操作系统绘制,因此决不会引发 Paint 事件。如果需要为 MonthCalendar 控件提供自定义的外观,则应重写 OnPrint 方法,调用 OnPrint 的基实现,然后再执行自定义绘图。

如果需要将自定义日期格式和选择限制为只用于一个日期,您可以考虑使用 DateTimePicker 控件,而不是 MonthCalendar。使用 DateTimePicker 可避免许多需要验证日期/时间值的情况。

有关月历控件的更多信息,请参见位于 https://www.microsoft.com/china/msdn 上的 Platform SDK 文档中的“Month Calendar Controls”(月历控件)。

提示

如果将 ShowTodayCircle 设置为 true,在启用视觉样式时使用 MonthCalendar 会导致不能正确绘制 MonthCalendar 控件的选择范围,并且在某个正方形中还会包含当天的日期。

示例

下面的代码示例显示一个包含 MonthCalendar 控件的窗体,而且该窗体显示一个日历年。该示例演示如何设置 BackColorForeColorTitleBackColorTitleForeColorCalendarDimensionsTrailingForeColor 属性,以自定义日历控件的外观。设置其他属性(如 AnnuallyBoldedDatesBoldedDatesMonthlyBoldedDates)来自定义以粗体显示哪些日期。该示例还设置 FirstDayOfWeekMaxDateMinDateMaxSelectionCount 属性,以更改日历格式。还处理了 DateSelectedDateChanged 事件并将它们的状态显示在窗体中。

Imports System
Imports System.Drawing
Imports System.Windows.Forms

Public NotInheritable Class Form1
    Inherits System.Windows.Forms.Form

    Friend WithEvents MonthCalendar1 As System.Windows.Forms.MonthCalendar
    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox

    <System.STAThread()> _
    Public Shared Sub Main()
        System.Windows.Forms.Application.Run(New Form1)
    End Sub 'Main

    Public Sub New()
        MyBase.New()

        Me.TextBox1 = New System.Windows.Forms.TextBox
        Me.TextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Me.TextBox1.Location = New System.Drawing.Point(48, 488)
        Me.TextBox1.Multiline = True
        Me.TextBox1.ReadOnly = True
        Me.TextBox1.Size = New System.Drawing.Size(824, 32)

        ' Create the calendar.
        Me.MonthCalendar1 = New System.Windows.Forms.MonthCalendar

        ' Set the calendar location.
        Me.MonthCalendar1.Location = New System.Drawing.Point(47, 16)

        ' Change the color.
        Me.MonthCalendar1.BackColor = System.Drawing.SystemColors.Info
        Me.MonthCalendar1.ForeColor = System.Drawing.Color.FromArgb( _
                                CType(192, System.Byte), CType(0, System.Byte), CType(192, System.Byte))
        Me.MonthCalendar1.TitleBackColor = System.Drawing.Color.Purple
        Me.MonthCalendar1.TitleForeColor = System.Drawing.Color.Yellow
        Me.MonthCalendar1.TrailingForeColor = System.Drawing.Color.FromArgb( _
                                CType(192, System.Byte), CType(192, System.Byte), CType(0, System.Byte))

        ' Add dates to the AnnuallyBoldedDates array.
        Me.MonthCalendar1.AnnuallyBoldedDates = New System.DateTime() _
                     {New System.DateTime(2002, 4, 20, 0, 0, 0, 0), _
                      New System.DateTime(2002, 4, 28, 0, 0, 0, 0), _
                      New System.DateTime(2002, 5, 5, 0, 0, 0, 0), _
                      New System.DateTime(2002, 7, 4, 0, 0, 0, 0), _
                      New System.DateTime(2002, 12, 15, 0, 0, 0, 0), _ 
                      New System.DateTime(2002, 12, 18, 0, 0, 0, 0)}

        ' Add dates to BoldedDates array.
        Me.MonthCalendar1.BoldedDates = New System.DateTime() {New System.DateTime(2002, 9, 26, 0, 0, 0, 0)}

        ' Add dates to MonthlyBoldedDates array.
        Me.MonthCalendar1.MonthlyBoldedDates = New System.DateTime() _
                     {New System.DateTime(2002, 1, 15, 0, 0, 0, 0), _
                      New System.DateTime(2002, 1, 30, 0, 0, 0, 0)}

        ' Configure the calendar to display 3 rows by 4 columns of months.
        Me.MonthCalendar1.CalendarDimensions = New System.Drawing.Size(4, 3)

        ' Set the week to begin on Monday.
        Me.MonthCalendar1.FirstDayOfWeek = System.Windows.Forms.Day.Monday

        ' Sets the maximum visible date on the calendar to 12/31/2010.
        Me.MonthCalendar1.MaxDate = New System.DateTime(2010, 12, 31, 0, 0, 0, 0)

        ' Set the minimum visible date on the calendar to 12/31/2010.
        Me.MonthCalendar1.MinDate = New System.DateTime(1999, 1, 1, 0, 0, 0, 0)

        ' Only allow 21 days to be selected at the same time.
        Me.MonthCalendar1.MaxSelectionCount = 21

        ' Set the calendar to move one month at a time when navigating using the arrows.
        Me.MonthCalendar1.ScrollChange = 1

        ' Do not show the "Today" banner.
        Me.MonthCalendar1.ShowToday = False

        ' Do not circle today's date.
        Me.MonthCalendar1.ShowTodayCircle = False

        ' Show the week numbers to the left of each week.
        Me.MonthCalendar1.ShowWeekNumbers = True

        ' Set up how the form should be displayed and add the controls to the form.
        Me.ClientSize = New System.Drawing.Size(920, 566)
        Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.TextBox1, Me.MonthCalendar1})
        Me.Text = "Month Calendar Example"

    End Sub

    Private Sub monthCalendar1_DateSelected(ByVal sender As Object, _
                    ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateSelected

        ' Show the start and end dates in the text box.
        Me.TextBox1.Text = "Date Selected: Start = " + _
                e.Start.ToShortDateString() + " : End = " + e.End.ToShortDateString()
    End Sub

    Private Sub monthCalendar1_DateChanged(ByVal sender As Object, _
                    ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged

        ' Show the start and end dates in the text box.
        Me.TextBox1.Text = "Date Changed: Start = " + _
                e.Start.ToShortDateString() + " : End = " + e.End.ToShortDateString()
    End Sub
End Class
using System;
using System.Drawing;
using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form
{
    private System.Windows.Forms.MonthCalendar monthCalendar1;
    private System.Windows.Forms.TextBox textBox1;

    [STAThread]
    static void Main() 
    {
        Application.Run(new Form1());
    }

    public Form1()
    {
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        this.textBox1.Location = new System.Drawing.Point(48, 488);
        this.textBox1.Multiline = true;
        this.textBox1.ReadOnly = true;
        this.textBox1.Size = new System.Drawing.Size(824, 32);

        // Create the calendar.
        this.monthCalendar1 = new System.Windows.Forms.MonthCalendar();

        // Set the calendar location.
        this.monthCalendar1.Location = new System.Drawing.Point(47, 16);

        // Change the color.
        this.monthCalendar1.BackColor = System.Drawing.SystemColors.Info;
        this.monthCalendar1.ForeColor = System.Drawing.Color.FromArgb(
                                 ((System.Byte)(192)), ((System.Byte)(0)), ((System.Byte)(192)));
        this.monthCalendar1.TitleBackColor = System.Drawing.Color.Purple;
        this.monthCalendar1.TitleForeColor = System.Drawing.Color.Yellow;
        this.monthCalendar1.TrailingForeColor = System.Drawing.Color.FromArgb(
                                 ((System.Byte)(192)), ((System.Byte)(192)), ((System.Byte)(0)));

        // Add dates to the AnnuallyBoldedDates array.
        this.monthCalendar1.AnnuallyBoldedDates = 
            new System.DateTime[] { new System.DateTime(2002, 4, 20, 0, 0, 0, 0),
                                    new System.DateTime(2002, 4, 28, 0, 0, 0, 0),
                                    new System.DateTime(2002, 5, 5, 0, 0, 0, 0),
                                    new System.DateTime(2002, 7, 4, 0, 0, 0, 0),
                                    new System.DateTime(2002, 12, 15, 0, 0, 0, 0),
                                    new System.DateTime(2002, 12, 18, 0, 0, 0, 0)};

        // Add dates to BoldedDates array.
        this.monthCalendar1.BoldedDates = new System.DateTime[] {new System.DateTime(2002, 9, 26, 0, 0, 0, 0)};

        // Add dates to MonthlyBoldedDates array.
        this.monthCalendar1.MonthlyBoldedDates = 
           new System.DateTime[] {new System.DateTime(2002, 1, 15, 0, 0, 0, 0),
                                  new System.DateTime(2002, 1, 30, 0, 0, 0, 0)};

        // Configure the calendar to display 3 rows by 4 columns of months.
        this.monthCalendar1.CalendarDimensions = new System.Drawing.Size(4, 3);

        // Set week to begin on Monday.
        this.monthCalendar1.FirstDayOfWeek = System.Windows.Forms.Day.Monday;

        // Set the maximum visible date on the calendar to 12/31/2010.
        this.monthCalendar1.MaxDate = new System.DateTime(2010, 12, 31, 0, 0, 0, 0);

        // Set the minimum visible date on calendar to 12/31/2010.
        this.monthCalendar1.MinDate = new System.DateTime(1999, 1, 1, 0, 0, 0, 0);

        // Only allow 21 days to be selected at the same time.
        this.monthCalendar1.MaxSelectionCount = 21;

        // Set the calendar to move one month at a time when navigating using the arrows.
        this.monthCalendar1.ScrollChange = 1;

        // Do not show the "Today" banner.
        this.monthCalendar1.ShowToday = false;

        // Do not circle today's date.
        this.monthCalendar1.ShowTodayCircle = false;
            
        // Show the week numbers to the left of each week.
        this.monthCalendar1.ShowWeekNumbers = true;

        // Add event handlers for the DateSelected and DateChanged events
        this.monthCalendar1.DateSelected += new System.Windows.Forms.DateRangeEventHandler(this.monthCalendar1_DateSelected);
        this.monthCalendar1.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.monthCalendar1_DateChanged);

        // Set up how the form should be displayed and add the controls to the form.
        this.ClientSize = new System.Drawing.Size(920, 566);
        this.Controls.AddRange(new System.Windows.Forms.Control[] {this.textBox1, this.monthCalendar1});
        this.Text = "Month Calendar Example";
    }

    private void monthCalendar1_DateSelected(object sender, System.Windows.Forms.DateRangeEventArgs e)
    {
        // Show the start and end dates in the text box.
        this.textBox1.Text = "Date Selected: Start = " +
            e.Start.ToShortDateString() + " : End = " + e.End.ToShortDateString();
    }

    private void monthCalendar1_DateChanged(object sender, System.Windows.Forms.DateRangeEventArgs e)
    {
        // Show the start and end dates in the text box.
        this.textBox1.Text = "Date Changed: Start =  " +
            e.Start.ToShortDateString() + " : End = " + e.End.ToShortDateString();
    }
}
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
public ref class Form1: public System::Windows::Forms::Form
{
private:
   System::Windows::Forms::MonthCalendar^ monthCalendar1;
   System::Windows::Forms::TextBox^ textBox1;

public:
   Form1()
   {
      this->textBox1 = gcnew System::Windows::Forms::TextBox;
      this->textBox1->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
      this->textBox1->Location = System::Drawing::Point( 48, 488 );
      this->textBox1->Multiline = true;
      this->textBox1->ReadOnly = true;
      this->textBox1->Size = System::Drawing::Size( 824, 32 );
      
      // Create the calendar.
      this->monthCalendar1 = gcnew System::Windows::Forms::MonthCalendar;
      
      // Set the calendar location.
      this->monthCalendar1->Location = System::Drawing::Point( 47, 16 );
      
      // Change the color.
      this->monthCalendar1->BackColor = System::Drawing::SystemColors::Info;
      this->monthCalendar1->ForeColor = System::Drawing::Color::FromArgb( ((System::Byte)(192)) ),((System::Byte)(0)),((System::Byte)(192));
      this->monthCalendar1->TitleBackColor = System::Drawing::Color::Purple;
      this->monthCalendar1->TitleForeColor = System::Drawing::Color::Yellow;
      this->monthCalendar1->TrailingForeColor = System::Drawing::Color::FromArgb( ((System::Byte)(192)) ),((System::Byte)(192)),((System::Byte)(0));
      
      // Add dates to the AnnuallyBoldedDates array.
      array<System::DateTime>^ temp1 = {System::DateTime( 2002, 4, 20, 0, 0, 0, 0 ),System::DateTime( 2002, 4, 28, 0, 0, 0, 0 ),System::DateTime( 2002, 5, 5, 0, 0, 0, 0 ),System::DateTime( 2002, 7, 4, 0, 0, 0, 0 ),System::DateTime( 2002, 12, 15, 0, 0, 0, 0 ),System::DateTime( 2002, 12, 18, 0, 0, 0, 0 )};
      this->monthCalendar1->AnnuallyBoldedDates = temp1;
      
      // Add dates to BoldedDates array.
      array<System::DateTime>^ temp2 = {System::DateTime( 2002, 9, 26, 0, 0, 0, 0 )};
      this->monthCalendar1->BoldedDates = temp2;
      
      // Add dates to MonthlyBoldedDates array.
      array<System::DateTime>^ temp5 = {System::DateTime( 2002, 1, 15, 0, 0, 0, 0 ),System::DateTime( 2002, 1, 30, 0, 0, 0, 0 )};
      this->monthCalendar1->MonthlyBoldedDates = temp5;
      
      // Configure the calendar to display 3 rows by 4 columns of months.
      this->monthCalendar1->CalendarDimensions = System::Drawing::Size( 4, 3 );
      
      // Set week to begin on Monday.
      this->monthCalendar1->FirstDayOfWeek = System::Windows::Forms::Day::Monday;
      
      // Set the maximum visible date on the calendar to 12/31/2010.
      this->monthCalendar1->MaxDate = System::DateTime( 2010, 12, 31, 0, 0, 0, 0 );
      
      // Set the minimum visible date on calendar to 12/31/2010.
      this->monthCalendar1->MinDate = System::DateTime( 1999, 1, 1, 0, 0, 0, 0 );
      
      // Only allow 21 days to be selected at the same time.
      this->monthCalendar1->MaxSelectionCount = 21;
      
      // Set the calendar to move one month at a time when navigating using the arrows.
      this->monthCalendar1->ScrollChange = 1;
      
      // Do not show the S"Today" banner.
      this->monthCalendar1->ShowToday = false;
      
      // Do not circle today's date.
      this->monthCalendar1->ShowTodayCircle = false;
      
      // Show the week numbers to the left of each week.
      this->monthCalendar1->ShowWeekNumbers = true;
      
      // Add event handlers for the DateSelected and DateChanged events
      this->monthCalendar1->DateSelected += gcnew System::Windows::Forms::DateRangeEventHandler( this, &Form1::monthCalendar1_DateSelected );
      this->monthCalendar1->DateChanged += gcnew System::Windows::Forms::DateRangeEventHandler( this, &Form1::monthCalendar1_DateChanged );
      
      // Set up how the form should be displayed and add the controls to the form.
      this->ClientSize = System::Drawing::Size( 920, 566 );
      array<System::Windows::Forms::Control^>^temp0 = {this->textBox1,this->monthCalendar1};
      this->Controls->AddRange( temp0 );
      this->Text = "Month Calendar Example";
   }


private:
   void monthCalendar1_DateSelected( Object^ /*sender*/, System::Windows::Forms::DateRangeEventArgs^ e )
   {
      
      // Show the start and end dates in the text box.
      this->textBox1->Text = String::Format( "Date Selected: Start = {0} : End = {1}", e->Start.ToShortDateString(), e->End.ToShortDateString() );
   }

   void monthCalendar1_DateChanged( Object^ /*sender*/, System::Windows::Forms::DateRangeEventArgs^ e )
   {
      
      // Show the start and end dates in the text box.
      this->textBox1->Text = String::Format( "Date Changed: Start = {0} : End = {1}", e->Start.ToShortDateString(), e->End.ToShortDateString() );
   }

};


[STAThread]
int main()
{
   Application::Run( gcnew Form1 );
}
import System.*;
import System.Drawing.*;
import System.Windows.Forms.*;

public class Form1 extends System.Windows.Forms.Form
{
    private System.Windows.Forms.MonthCalendar monthCalendar1;
    private System.Windows.Forms.TextBox textBox1;

    /** @attribute STAThread()
     */
    public static void main(String[] args)
    {
        Application.Run(new Form1());
    } //main

    public Form1()
    {
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.textBox1.set_BorderStyle(
            System.Windows.Forms.BorderStyle.FixedSingle);
        this.textBox1.set_Location(new System.Drawing.Point(48, 488));
        this.textBox1.set_Multiline(true);
        this.textBox1.set_ReadOnly(true);
        this.textBox1.set_Size(new System.Drawing.Size(824, 32));
        // Create the calendar.
        this.monthCalendar1 = new System.Windows.Forms.MonthCalendar();
        // Set the calendar location.
        this.monthCalendar1.set_Location(new System.Drawing.Point(47, 16));
        // Change the color.
        this.monthCalendar1.set_BackColor(
            System.Drawing.SystemColors.get_Info());
        this.monthCalendar1.set_ForeColor(
            System.Drawing.Color.FromArgb(192, 0, 192));
        this.monthCalendar1.set_TitleBackColor(System.Drawing.Color.get_Purple());
        this.monthCalendar1.set_TitleForeColor(System.Drawing.Color.get_Yellow());
        this.monthCalendar1.set_TrailingForeColor(
            System.Drawing.Color.FromArgb(192, 192, 0));
        // Add dates to the AnnuallyBoldedDates array.
        this.monthCalendar1.set_AnnuallyBoldedDates(new System.DateTime[] {
            new System.DateTime(2002, 4, 20, 0, 0, 0, 0),
            new System.DateTime(2002, 4, 28, 0, 0, 0, 0),
            new System.DateTime(2002, 5, 5, 0, 0, 0, 0),
            new System.DateTime(2002, 7, 4, 0, 0, 0, 0),
            new System.DateTime(2002, 12, 15, 0, 0, 0, 0),
            new System.DateTime(2002, 12, 18, 0, 0, 0, 0) });
        // Add dates to BoldedDates array.
        this.monthCalendar1.set_BoldedDates(new System.DateTime[] {
            new System.DateTime(2002, 9, 26, 0, 0, 0, 0) });
        // Add dates to MonthlyBoldedDates array.
        this.monthCalendar1.set_MonthlyBoldedDates(new System.DateTime[] {
            new System.DateTime(2002, 1, 15, 0, 0, 0, 0),
            new System.DateTime(2002, 1, 30, 0, 0, 0, 0) });
        // Configure the calendar to display 3 rows by 4 columns of months.
        this.monthCalendar1.set_CalendarDimensions(new System.Drawing.Size(4, 3));
        // Set week to begin on Monday.
        this.monthCalendar1.set_FirstDayOfWeek(System.Windows.Forms.Day.Monday);
        // Set the maximum visible date on the calendar to 12/31/2010.
        this.monthCalendar1.set_MaxDate(
            new System.DateTime(2010, 12, 31, 0, 0, 0, 0));
        // Set the minimum visible date on calendar to 12/31/2010.
        this.monthCalendar1.set_MinDate(
            new System.DateTime(1999, 1, 1, 0, 0, 0, 0));
        // Only allow 21 days to be selected at the same time.
        this.monthCalendar1.set_MaxSelectionCount(21);
        // Set the calendar to move one month at a time when navigating
        // using the arrows.
        this.monthCalendar1.set_ScrollChange(1);
        // Do not show the "Today" banner.
        this.monthCalendar1.set_ShowToday(false);
        // Do not circle today's date.
        this.monthCalendar1.set_ShowTodayCircle(false);
        // Show the week numbers to the left of each week.
        this.monthCalendar1.set_ShowWeekNumbers(true);
        // Add event handlers for the DateSelected and DateChanged events
        this.monthCalendar1.add_DateSelected(
            new System.Windows.Forms.DateRangeEventHandler(
            this.monthCalendar1_DateSelected));
        this.monthCalendar1.add_DateChanged(
            new System.Windows.Forms.DateRangeEventHandler(
            this.monthCalendar1_DateChanged));
        // Set up how the form should be displayed and add the controls to
        // the form.
        this.set_ClientSize(new System.Drawing.Size(920, 566));
        this.get_Controls().AddRange(new System.Windows.Forms.Control[] {
            this.textBox1, this.monthCalendar1 });
        this.set_Text("Month Calendar Example");
    } //Form1

    private void monthCalendar1_DateSelected(Object sender,
        System.Windows.Forms.DateRangeEventArgs e)
    {
        // Show the start and end dates in the text box.
        this.textBox1.set_Text("Date Selected: Start = "
            + e.get_Start().ToShortDateString() + " : End = "
            + e.get_End().ToShortDateString());
    } //monthCalendar1_DateSelected

    private void monthCalendar1_DateChanged(Object sender,
        System.Windows.Forms.DateRangeEventArgs e)
    {
        // Show the start and end dates in the text box.
        this.textBox1.set_Text("Date Changed: Start =  "
            + e.get_Start().ToShortDateString() + " : End = "
            + e.get_End().ToShortDateString());
    } //monthCalendar1_DateChanged
} //Form1

继承层次结构

System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.Windows.Forms.Control
        System.Windows.Forms.MonthCalendar

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0

请参见

参考

MonthCalendar 成员
System.Windows.Forms 命名空间