Как изменить цвет определенных дат в элементе управления 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();
}
}