Muchas veces necesitamos hacer un calendario manualmente para ciertas operaciones en mi caso un registro de llegadas, donde ciertos pictureBox cambiaban de imagen dependiendo de la asistencia cierto día; es decir, el día lunes 2 de enero asistió y se cambiaba la imagen por una palomita, de no haber llegado una tachita.
[Tienes que estar registrado y conectado para ver esa imagen]Para empezar necesitamos 38 labels con nombres desde el 1 al 38 en mi caso les llamo lblDia y el numero de label es decir el primero sería lblDia1, lblDia2...lblDian.
¿Porque 38 si el mes solo tiene cuanto mucho 31 días?
Esto es porque el primer día del mes puede ser un domingo es decir la semana puede empezar un domingo y esto quiere decir que en los label's empezará el día desde el label numero 7 y que tal si fuesen 31 días en el mes, entonces el ultimo día sería igual a 31+7 que dan como resultado 38, el ultimo dia de este mes sería en el label 38, yo utilizo 42 por comodidad y para hacer el efecto de el calendario completo aunque con 38 label's son suficientes.
Estos controles irán acomodados en filas de 7 columnas que representarán los días de la semana (lunes,martes,etc.) en forma de calendario.
El diseño se encuentra en la parte de arriba.
Insertamos unos controles que necesitaremos:
Un combox
Un textBox
Al combox insertamos los meses del año, mientras que en textbox insertaremos el año del que queremos saber la fecha y los días.
- Código:
-
int var_mesActual = cbMeses.SelectedIndex + 1; // obtengo el mes actual
int var_anio= int.Parse(txtAño.Text); // obtengo el año actual
int var_anioNuevo = var_anio;//Año
int var_mesSiguiente;
if (cbMeses.SelectedIndex!=11)
{
var_mesSiguiente = cbMeses.SelectedIndex + 2; // obtengo el mes siguiente
}
else
{
var_mesSiguiente = 1; // obtengo el mes siguiente
var_anioNuevo += 1;
}
DateTime inicio = Convert.ToDateTime("01/" + var_mesActual + "/" + var_anio);// pongo el 1 porque siempre es el primer día
DateTime final = Convert.ToDateTime("01/" + var_mesSiguiente + "/" + var_anioNuevo).AddDays(-1); //resto un día al mes y con esto obtengo el ultimo día 1-1=ultimo dia del mes anterior
int diaInicial = (int)inicio.DayOfWeek;
if (diaInicial == 0)
{
diaInicial = 7;
}
/* Limpia los primeros labels en caso de no ocuparlos */
for (int j = 1; j < diaInicial; j++)
{
gbDias.Controls["lbl" + j].Text = "";
}
/* Pone los números de día en cada label */
int l = 1;
for (int i = diaInicial; i < (int)final.Day + diaInicial; i++)
{
gbDias.Controls["lbl" + i.ToString()].Text = l.ToString();
l++;
}
/* Limpia los últimos label's en caso de no ser ocupados */
for (int j=((int)final.Day) + diaInicial;j <= 42; j++ )
{
gbDias.Controls["lbl" + j].Text = "x";
}
lblMes.Text = cbMeses.Items[cbMeses.SelectedIndex].ToString();
Descargar:
[Tienes que estar registrado y conectado para ver este vínculo]