Как изменить цвет определенных дат в элементе управления MonthCalendar?

Как я могу изменить цвет определенных дат в элементе управления MonthCalendar в VB.NET?

например, мне нужно изменить цвет 21 января на красный, воскресенье на оранжевый и так далее...

4 ответов


это невозможно. нет встроенного способа настройки способа отображения отдельных дней или дат на MonthCalendar управление.

вы мог бы владелец-нарисуйте элемент управления, но это слишком много работы, чтобы оправдать. Это сделает вас ответственным за то, чтобы полностью контролировать себя. Обратите внимание, что если вы выберете этот маршрут, то MonthCalendar control не поднимает Paint событие, потому что базовый элемент управления устанавливает UserPaint - чуть "Ложный." Вам придется подкласс элемента управления и переопределить его OnPrint метод вместо.

Я не могу лично рекомендовать какие-либо сторонние элементы управления, которые обеспечивают этот уровень настройки, но быстрый поиск Google, кажется, появляется несколько вариантов:


в visual studio 2005 перетащите monthcalendar из панели инструментов.

перейдите к свойствам.

есть ежегодно жирным шрифтом даты, ежемесячно жирным шрифтом даты и жирным шрифтом даты. U может добавлять нужные даты в эти свойства.


попробуйте это:

Private Sub pintaCalendarioNaData(ByRef mc As MonthCalendar, ByVal data As Date, ByVal cor As String)
        Dim gMonthCalendar As Graphics = mc.CreateGraphics()
        Dim oHTIMonths As MonthCalendar.HitTestInfo
        Dim arrDates As New ArrayList()
        Try
            For intRows As Integer = 1 To mc.Size.Width - 1
                For intCols As Integer = 1 To mc.Size.Height - 1
                    oHTIMonths = mc.HitTest(intRows, intCols)
                    If oHTIMonths.HitArea = MonthCalendar.HitArea.Date Then
                        If CDate(mc.HitTest(intRows, intCols).Time) = CDate(data) Then
                             gMonthCalendar.DrawRectangle(New Pen(ColorTranslator.FromHtml(cor), 2), intRows, intCols, 24, 15)
                            GoTo fim
                        End If
                    End If
                Next intCols
            Next intRows
fim:
        Catch ex As Exception
            MessageBox.Show("Error: " & vbNewLine & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Err.Clear()
        Finally

        End Try
    End Sub

этот суб рисует один MonthCalendar (mc) в одну конкретную дату (данные) с одним цветом (cor)


Шаг 1: перетащите элемент управления видом сетки и календарь в веб-форме или форме окна:

Шаг 2: вставьте кодирования .страница cs

using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;

public partial class frmCalander : System.Web.UI.Page
{
    SqlConnection con= new SqlConnection();
    SqlDataAdapter myda;
    DataSet ds = new DataSet();
    DataSet dsSelDate;
    String strConn;
    protected void Page_Load(object sender, EventArgs e)
    {
        con.ConnectionString = ConfigurationManager.ConnectionStrings["STUDENTConnectionString"].ConnectionString;
        myda = new SqlDataAdapter("Select * from EventTable", con);
        myda.Fill(ds, "Table");

    }
    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
        if (! e.Day.IsOtherMonth )
        {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    if ((dr["EventDate"].ToString() != DBNull.Value.ToString()))
                    {
                        DateTime dtEvent= (DateTime)dr["EventDate"];
                        if (dtEvent.Equals(e.Day.Date))
                        {
                            e.Cell.BackColor = Color.PaleVioletRed;
                        }
                    }
                }
        }
//If the month is not CurrentMonth then hide the Dates
        else
        {
                e.Cell.Text = "";
        }
    }


    protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    {
        myda = new SqlDataAdapter("Select EventId, EventName, EventLocation, Convert(varchar,EventDate,105) as EventDate  from EventTable where EventDate='" + Calendar1.SelectedDate.ToString() + "'", con);
        dsSelDate = new DataSet();
        myda.Fill(dsSelDate, "AllTables");
        if (dsSelDate.Tables[0].Rows.Count == 0)
        {
            GridView1.Visible = false;
        }
        else
        {
            GridView1.Visible = true;
            GridView1.DataSource = dsSelDate;
            GridView1.DataBind();
        }

    }