Explication du fichier Form1.cs et son interaction avec Form1.Designer.cs
Form1.cs
Le fichier Form1.cs contient la logique métier de l’application Windows Forms. Il représente le formulaire principal de l’application, gère les événements utilisateurs et interagit avec les services backend, comme MyCalendarService, pour manipuler les données du calendrier.
Les fonctionnalités principales incluent :
- Initialisation des composants du formulaire.
- Mise à jour des contrôles du formulaire pour afficher la date et l’heure actuelles.
- Affichage des événements du calendrier pour une date sélectionnée.
- Ajout de nouveaux événements au calendrier.
- Gestion des contrôles d’interface utilisateur, comme les boutons, les cases à cocher, et les sélecteurs de date et d’heure.
Form1.Designer.cs
Le fichier Form1.Designer.cs contient le code généré automatiquement par l’éditeur de formulaires Windows Forms (Visual Studio). Ce fichier définit les composants de l’interface utilisateur (UI) et leurs propriétés (comme les boutons, les labels, les ListBox, etc.). Il est lié au fichier Form1.cs via une partial class, permettant ainsi de séparer la logique métier de la définition de l’interface utilisateur.
Lorsque des modifications sont effectuées dans l’éditeur visuel de formulaires, elles sont reflétées dans Form1.Designer.cs. Le fichier Form1.cs utilise ces composants définis pour ajouter des comportements et des interactions.
Liste exhaustive des méthodes dans Form1.cs
Form1() : Constructeur de la classe Form1. Initialise les composants du formulaire et le service de calendrier.UpdateFormToCurrentDate() : Met à jour les contrôles du formulaire pour afficher la date et l'heure actuelles.UpdateEventListByADay(DateTime date) : Met à jour la liste des événements pour une date donnée.ShowEvents(List<Event> events) : Affiche les événements dans le ListBox.btnRefresh_Click(object sender, EventArgs e) : Gestionnaire d'événement pour le bouton de rafraîchissement. Met à jour la liste des événements en fonction de la date sélectionnée.btnAdd_Click(object sender, EventArgs e) : Gestionnaire d'événement pour le bouton d'ajout. Ajoute un nouvel événement en fonction des données saisies par l'utilisateur.ReinitForm() : Réinitialise les contrôles du formulaire.checkBoxAllDay_CheckedChanged(object sender, EventArgs e) : Gestionnaire d'événement pour le changement de l'état de la case à cocher "Toute la journée". Ajuste la visibilité des contrôles en fonction de l'état de la case à cocher.pickerDateStart_ValueChanged(object sender, EventArgs e) : Gestionnaire d'événement pour le changement de la date de début. Ajuste la date de fin et l'heure en fonction de la nouvelle date de début.pickerDateEnd_ValueChanged(object sender, EventArgs e) : Gestionnaire d'événement pour le changement de la date de fin. Ajuste la date de début et l'heure en fonction de la nouvelle date de fin.pickerTimeStart_ValueChanged(object sender, EventArgs e) : Gestionnaire d'événement pour le changement de l'heure de début. Ajuste l'heure de fin en fonction de la nouvelle heure de début.pickerTimeEnd_ValueChanged(object sender, EventArgs e) : Gestionnaire d'événement pour le changement de l'heure de fin. Ajuste l'heure de début en fonction de la nouvelle heure de fin.searchDateTimePicker_ValueChanged(object sender, EventArgs e) : Gestionnaire d'événement pour le changement de la date de recherche. Met à jour la liste des événements en fonction de la nouvelle date sélectionnée.
using Google.Apis.Calendar.v3;
using Google.Apis.Calendar.v3.Data;
using MyCalendarToDoToday.Services;
namespace MyCalendarToDoToday
{
/// <summary>
/// Classe représentant le formulaire principal de l'application.
/// </summary>
public partial class Form1 : Form
{
bool isFullDay = false;
MyCalendarService myCalendarService;
/// <summary>
/// Constructeur de la classe Form1.
/// Initialise les composants du formulaire et le service de calendrier.
/// </summary>
public Form1()
{
InitializeComponent();
myCalendarService = MyCalendarService.GetInstance();
// Appeler la méthode pour actualiser le formulaire à la date actuelle
UpdateFormToCurrentDate();
}
/// <summary>
/// Met à jour les contrôles du formulaire pour afficher la date et l'heure actuelles.
/// </summary>
private void UpdateFormToCurrentDate()
{
// Définir les valeurs des contrôles de date et d'heure à la date et à l'heure actuelles
pickerDateStart.Value = DateTime.Today;
pickerDateEnd.Value = DateTime.Today;
pickerTimeStart.Value = DateTime.Now;
pickerTimeEnd.Value = DateTime.Now;
searchDateTimePicker.Value = DateTime.Today;
}
/// <summary>
/// Met à jour la liste des événements pour une date donnée.
/// </summary>
/// <param name="date">La date pour laquelle les événements doivent être récupérés.</param>
private void UpdateEventListByADay(DateTime date)
{
// Définir le texte du titre
var titleText = $"Le {date.ToString("dddd")} {date.ToShortDateString()} :";
// Afficher le titre dans un Label
titleDate.Text = titleText;
// Exécuter la requête et récupérer la liste des événements
List<Event> events = myCalendarService.FetchEventListByADay(date);
// Afficher les événements dans un ListBox
ShowEvents(events);
// Message de mise à jour
// MessageBox.Show($"Liste d'événements du {date.ToString("dddd")} {date.ToShortDateString()} a été mise à jour");
}
/// <summary>
/// Affiche les événements dans le ListBox.
/// </summary>
/// <param name="events">La liste des événements à afficher.</param>
private void ShowEvents(List<Event> events)
{
if (events != null)
{
// Nettoyer le texte précédent
listBoxEventToday.Items.Clear();
// Lire la nouvelle liste
foreach (var ev in events)
{
var start = ev.Start.DateTime.HasValue ? ev.Start.DateTime.Value.ToString("HH:mm tt") : "Journée";
var end = ev.End.DateTime.HasValue ? $"{ev.End.DateTime.Value.ToString("HH:mm tt")} - " : "";
var eventDetails = $"{start} - {end}{ev.Summary}";
listBoxEventToday.Items.Add(eventDetails);
}
}
}
/// <summary>
/// Gestionnaire d'événement pour le bouton de rafraîchissement.
/// Met à jour la liste des événements en fonction de la date sélectionnée.
/// </summary>
/// <param name="sender">L'objet source de l'événement.</param>
/// <param name="e">Les données de l'événement.</param>
private void btnRefresh_Click(object sender, EventArgs e)
{
// Nettoyer le texte précédent
listBoxEventToday.Items.Clear();
// Récupérer la date à afficher
var date = searchDateTimePicker.Value;
// Appel de la méthode de mise à jour de la liste d'évènements
UpdateEventListByADay(date);
}
/// <summary>
/// Gestionnaire d'événement pour le bouton d'ajout.
/// Ajoute un nouvel événement en fonction des données saisies par l'utilisateur.
/// </summary>
/// <param name="sender">L'objet source de l'événement.</param>
/// <param name="e">Les données de l'événement.</param>
private void btnAdd_Click(object sender, EventArgs e)
{
// Vérification de l'input Titre
if (textBoxTitleNewEvent.Text == "")
{
MessageBox.Show("Le Titre est requis");
}
else
{
// Récupérer les informations saisies par l'utilisateur
string eventTitle = textBoxTitleNewEvent.Text;
string location = textBoxLocation.Text;
string description = textBoxDescription.Text;
if (isFullDay)
{
// Récupération de la date
DateTime date = pickerDateStart.Value;
// Appel de du service
myCalendarService.CreateFullDayEvent(date, eventTitle, location, description);
}
else
{
// Récupération des dates et heures
DateTime startDate = pickerDateStart.Value.Date + pickerTimeStart.Value.TimeOfDay;
DateTime endDate = pickerDateEnd.Value.Date + pickerTimeEnd.Value.TimeOfDay;
// Appel du service
myCalendarService.CreateDateTimeEvent(startDate, endDate, eventTitle, location, description);
}
// Rafraichissement de la liste d'événement
if (searchDateTimePicker.Value == pickerDateStart.Value)
{
UpdateEventListByADay(pickerDateStart.Value);
}
else
{
searchDateTimePicker.Value = pickerDateStart.Value;
}
// Réinitialisation du formulaire
ReinitForm();
}
}
/// <summary>
/// Réinitialise les contrôles du formulaire.
/// </summary>
private void ReinitForm()
{
textBoxTitleNewEvent.Text = "";
textBoxLocation.Text = "";
textBoxDescription.Text = "";
pickerDateStart.Value = DateTime.Today;
pickerDateEnd.Value = DateTime.Today;
pickerTimeStart.Value = DateTime.Now;
pickerTimeEnd.Value = DateTime.Now;
}
/// <summary>
/// Gestionnaire d'événement pour le changement de l'état de la case à cocher "Toute la journée".
/// Ajuste la visibilité des contrôles en fonction de l'état de la case à cocher.
/// </summary>
/// <param name="sender">L'objet source de l'événement.</param>
/// <param name="e">Les données de l'événement.</param>
private void checkBoxAllDay_CheckedChanged(object sender, EventArgs e)
{
if (checkBoxAllDay.Checked)
{
isFullDay = true;
pickerTimeStart.Visible = false;
pickerDateEnd.Visible = false;
pickerTimeEnd.Visible = false;
labelTitleEnd.Visible = false;
}
else
{
isFullDay = false;
pickerTimeStart.Visible = true;
pickerDateEnd.Visible = true;
pickerTimeEnd.Visible = true;
labelTitleEnd.Visible = true;
}
}
/// <summary>
/// Gestionnaire d'événement pour le changement de la date de début.
/// Ajuste la date de fin et l'heure en fonction de la nouvelle date de début.
/// </summary>
/// <param name="sender">L'objet source de l'événement.</param>
/// <param name="e">Les données de l'événement.</param>
private void pickerDateStart_ValueChanged(object sender, EventArgs e)
{
if (pickerDateStart.Value > pickerDateEnd.Value && !isFullDay)
{
pickerDateEnd.Value = pickerDateStart.Value;
}
else if (!isFullDay && pickerDateStart.Value == pickerDateEnd.Value && pickerTimeStart.Value > pickerTimeEnd.Value)
{
pickerTimeEnd.Value = pickerTimeStart.Value;
}
}
/// <summary>
/// Gestionnaire d'événement pour le changement de la date de fin.
/// Ajuste la date de début et l'heure en fonction de la nouvelle date de fin.
/// </summary>
/// <param name="sender">L'objet source de l'événement.</param>
/// <param name="e">Les données de l'événement.</param>
private void pickerDateEnd_ValueChanged(object sender, EventArgs e)
{
if (pickerDateStart.Value > pickerDateEnd.Value && !isFullDay)
{
pickerDateStart.Value = pickerDateEnd.Value;
}
else if (!isFullDay && pickerDateStart.Value == pickerDateEnd.Value && pickerTimeStart.Value > pickerTimeEnd.Value)
{
pickerTimeEnd.Value = pickerTimeStart.Value;
}
}
/// <summary>
/// Gestionnaire d'événement pour le changement de l'heure de début.
/// Ajuste l'heure de fin en fonction de la nouvelle heure de début.
/// </summary>
/// <param name="sender">L'objet source de l'événement.</param>
/// <param name="e">Les données de l'événement.</param>
private void pickerTimeStart_ValueChanged(object sender, EventArgs e)
{
if (!isFullDay && pickerDateStart.Value == pickerDateEnd.Value && pickerTimeStart.Value > pickerTimeEnd.Value)
{
pickerTimeEnd.Value = pickerTimeStart.Value;
}
}
/// <summary>
/// Gestionnaire d'événement pour le changement de l'heure de fin.
/// Ajuste l'heure de début en fonction de la nouvelle heure de fin.
/// </summary>
/// <param name="sender">L'objet source de l'événement.</param>
/// <param name="e">Les données de l'événement.</param>
private void pickerTimeEnd_ValueChanged(object sender, EventArgs e)
{
if (!isFullDay && pickerDateStart.Value == pickerDateEnd.Value && pickerTimeStart.Value > pickerTimeEnd.Value)
{
pickerTimeStart.Value = pickerTimeEnd.Value;
}
}
/// <summary>
/// Gestionnaire d'événement pour le changement de la date de recherche.
/// Met à jour la liste des événements en fonction de la nouvelle date sélectionnée.
/// </summary>
/// <param name="sender">L'objet source de l'événement.</param>
/// <param name="e">Les données de l'événement.</param>
private void searchDateTimePicker_ValueChanged(object sender, EventArgs e)
{
//MessageBox.Show("log searchDateTimePicker_ValueChanged");
// Nettoyer le texte précédent
listBoxEventToday.Items.Clear();
// Récupérer la date à afficher
var date = searchDateTimePicker.Value;
// Appel de la méthode de mise à jour de la liste d'évènements
UpdateEventListByADay(date);
}
}
}
