Как изменить цвет определенных дат в элементе управления MonthCalendar в VB.NET?
Например, мне нужно изменить цвет 21 января на красный, воскресенья на оранжевый и так далее...
Как изменить цвет определенных дат в элементе управления MonthCalendar в VB.NET?
Например, мне нужно изменить цвет 21 января на красный, воскресенья на оранжевый и так далее...
Это невозможно. Не существует встроенного способа настройки отображения отдельных дней или дат в элементе управления MonthCalendar
.
Вы могли нарисовать элемент управления, но это слишком много работы, чтобы ее можно было оправдать. Это сделает вас ответственным за отрисовку всего элемента управления самостоятельно. Обратите внимание, что если вы решите пойти по этому пути, элемент управления MonthCalendar
не вызовет событие Paint
, поскольку базовый элемент управления устанавливает бит UserPaint
в значение "False". Вам придется создать подкласс элемента управления и переопределить его OnPrint
метод вместо этого.
Я не могу лично рекомендовать какие-либо сторонние элементы управления, которые обеспечивают такой уровень настройки, но быстрый поиск в Google действительно показывает несколько вариантов:
Попробуй это:
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)
В Visual Studio 2005 вы перетаскиваете месячный календарь из панели инструментов.
Зайдите в свойства.
Есть годовые даты, выделенные жирным шрифтом, ежемесячные даты, выделенные жирным шрифтом, и даты, выделенные жирным шрифтом. Вы можете добавить нужные даты в эти свойства.
Шаг 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();
}
}