Contacts/Contacts/FrmContacts.cs
2024-09-26 15:27:35 +02:00

469 lines
16 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Diagnostics;
namespace Contacts
{
/// <summary>
/// Classe frmContacts
/// Formulaire des contacts
/// </summary>
public partial class frmContacts : Form
{
// liste des contacts
private List<Contact> lesContacts = new List<Contact>();
// nom du fichier de sérialisation
private string fichier = "ficcontact";
/// <summary>
/// Constructeur
/// </summary>
public frmContacts()
{
InitializeComponent();
}
/// <summary>
/// Préparer l'ajout en gérant les objets graphiques
/// </summary>
private void DebutAjout()
{
// Gérer les accès aux objets graphiques
grbAjout.Enabled = true;
grbContacts.Enabled = false;
grpRecherche.Enabled = false;
imgPhoto.Enabled = true;
btnNouveauContact.Enabled = false;
lblChoixPhoto.Visible = true;
// désactiver la ligne sélectionnée dans la liste
lstContact.SelectedIndex = -1;
// affiche la photo standard
AffichePhotoStandard();
// se positionner sur le nom
txtNom.Focus();
}
/// <summary>
/// Préparer l'après ajout en gérant les objets graphiques
/// </summary>
private void FinAjout()
{
// Gérer les accès aux objets graphiques
grbAjout.Enabled = false;
grbContacts.Enabled = true;
grpRecherche.Enabled = true;
imgPhoto.Enabled = false;
btnNouveauContact.Enabled = true;
lblChoixPhoto.Visible = false;
// vider les zones de saisie
txtNom.Text = "";
txtPrenom.Text = "";
txtTel.Text = "";
// se positoinner sur la liste
lstContact.Focus();
radioPerso.Checked = true;
}
/// <summary>
/// se positionner sur la ligne demandée en paramètre ou la 1e ligne si la liste n'est pas vide
/// </summary>
/// <param name="ligne">ligne à sélectionner</param>
private void PositionDansListe(String ligne)
{
try
{
if (ligne != null)
{
int index = lstContact.FindStringExact(ligne);
lstContact.SelectedIndex = index;
}
else
{
lstContact.SelectedIndex = 0;
}
}
catch
{
lstContact.SelectedIndex = -1;
}
}
/// <summary>
/// Mettre à jour la listbox avec tous les contacts
/// et si demandé, se positionner sur la ligne reçue en paramètre
/// </summary>
/// <param name="ligne">ligne à sélectionner</param>
private void MajListBox(String ligne)
{
// trier la liste
lesContacts.Sort();
// lier la ListBox avec lesContacts pour la remplir
BindingList<Contact> bdlContacts = new BindingList<Contact>(lesContacts);
lstContact.DataSource = bdlContacts;
// si le dictionnaire est vide, mettre la photo vide
if (lesContacts.Count == 0)
{
VidePhoto();
}
// sauver la liste dans le fichier
Serialise.Sauve(fichier, lesContacts);
// se positionner sur la ligne demandée en paramètre ou la 1e ligne si la liste n'est pas vide
PositionDansListe(ligne);
}
/// <summary>
/// Vider l'affichage de la photo (afficher une photo blanche)
/// </summary>
private void VidePhoto()
{
imgPhoto.Image = Properties.Resources.vide;
}
/// <summary>
/// Afficher la photo standard
/// </summary>
private void AffichePhotoStandard()
{
imgPhoto.Image = Properties.Resources.standard;
}
/// <summary>
/// Supprimer le contact donc l'index est reçu en paramètre
/// </summary>
/// <param name="index">index du contact à supprimer</param>
private void SupprContact(int index)
{
if (index != -1)
{
lesContacts.RemoveAt(index);
MajListBox(null);
}
}
/// <summary>
/// Evénement Click sur le bouton bntSuppr
/// Supprimer le contact sélectionné
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnSuppr_Click(object sender, EventArgs e)
{
// contrôler qu'une ligne est bien sélectionnée
if (lstContact.SelectedIndex != -1)
{
// demander une confirmation de suppression
if (MessageBox.Show("Supprimer le contact ?", "Confirmation", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
// supprimer le contact sélectionné
SupprContact(lstContact.SelectedIndex);
}
}
}
/// <summary>
/// Evénement sélection d'un contact dans la lstContact
/// Charger la photo
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LstContact_SelectedIndexChanged(object sender, EventArgs e)
{
// si une ligne est sélectionnée
if (lstContact.SelectedIndex != -1)
{
Contact leContact = lesContacts[lstContact.SelectedIndex];
// afficher l'image
imgPhoto.Image = leContact.getPhoto();
}
else
{
// affiche une image vide
VidePhoto();
}
}
/// <summary>
/// Evénement clic sur bouton btnAjouter
/// Ajouter le contact dans la liste
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnAjouter_Click(object sender, EventArgs e)
{
// vérifier que le nom, prénom et tel ne sont pas vides
if (!txtNom.Text.Equals("") && !txtTel.Text.Equals("") && !txtPrenom.Text.Equals("") || radioEntreprise.Checked)
{
// créer le contact et l'ajouter dans la collection
Contact nouveauContact;
if (radioPerso.Checked)
{
nouveauContact = new Contact(txtNom.Text.ToUpper(), txtPrenom.Text, txtTel.Text, imgPhoto.Image);
}
else
{
nouveauContact = new Contact(txtNom.Text.ToUpper(), txtTel.Text, imgPhoto.Image);
}
lesContacts.Add(nouveauContact);
// mettre à jour de la ListBox
MajListBox(nouveauContact.ToString());
// gérer la fin de l'ajout au niveau des objets graphiques
FinAjout();
}
else
{
MessageBox.Show("Toutes les zones sont obligatoires");
}
}
/// <summary>
/// Evénement clic sur le bouton btnModif
/// Supprimer le contact et transférer ces informations dans la zone d'ajout
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnModif_Click(object sender, EventArgs e)
{
// contrôler si un contact est sélectionné
if (lstContact.SelectedIndex != -1)
{
// récupérer l'index du contact
int index = lstContact.SelectedIndex;
// récupérer le contact concerné
Contact leContact = lesContacts[index];
// supprimer le contact
SupprContact(index);
// remplir les zones d'ajout avec les informations du contact
txtNom.Text = leContact.getNom();
txtPrenom.Text = leContact.getPrenom();
txtTel.Text = leContact.getTel();
// gérer le début de l'ajout au niveau des objets graphiques
DebutAjout();
// mettre la photo du contact
imgPhoto.Image = leContact.getPhoto();
}
}
/// <summary>
/// Evénement chargement de frmContacts
/// Préparer les composants et récupérer la sérialisation
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmContacts_Load(object sender, EventArgs e)
{
// préparer les composants graphiques comme pour la fin d'un ajout
FinAjout();
// récupérer la sauvegarde des contacts, si elle existe
Object recupContacts = Serialise.Recup(fichier);
if (recupContacts != null)
{
lesContacts = (List<Contact>)recupContacts;
// remplir de la listbox avec les contacts récupérés
MajListBox(null);
}
}
/// <summary>
/// Evénement Click sur le bouton btnAnnuler
/// Annuler la tentative d'ajout
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnAnnuler_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Attention les informations seront perdues.", "Confirmation", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
// gérer la fin de l'ajout au niveau des objets graphiques
FinAjout();
// mettre à jour la listbox
MajListBox(null);
}
}
/// <summary>
/// Evénement Click sur la photo
/// possibilité de sélectionner une photo
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ImgPhoto_Click(object sender, EventArgs e)
{
// boite de dialogue pour sélectionner un fichier
OpenFileDialog rechercheFichier;
rechercheFichier = new OpenFileDialog();
DialogResult choix = rechercheFichier.ShowDialog();
// si un fichier est sélectionné
if (choix == DialogResult.OK)
{
// récupérer le fichier
string nomFichier = rechercheFichier.FileName;
// tente d'afficher l'image
try
{
imgPhoto.Image = Image.FromFile(nomFichier);
}
catch
{
// erreur le fichier n'est pas une image
MessageBox.Show("Le fichier n'est pas une image");
}
}
}
/// <summary>
/// Evénement Click sur le label lblChoixPhoto
/// mêmes traitements que le clic sur la photo
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LblChoixPhoto_Click(object sender, EventArgs e)
{
ImgPhoto_Click(null, null);
}
/// <summary>
/// Evénement Click sur le bouton btnNouveauContact
/// Permettre d'ajouter un contact
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnNouveauContact_Click(object sender, EventArgs e)
{
DebutAjout();
}
/// <summary>
/// Evenement lorsque radioPerso est sélectionné
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void radioPerso_CheckedChanged(object sender, EventArgs e)
{
ChangeTypeContact();
}
/// <summary>
/// Active/Désactive txtPrenom et lblPrenom selon le choix de l'utilisateur
/// </summary>
private void ChangeTypeContact()
{
lblPrenom.Visible = radioPerso.Checked;
txtPrenom.Visible = radioPerso.Checked;
}
/// <summary>
/// Evenement lorsque radioEntreprise est sélectionné
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void radioEntreprise_CheckedChanged(object sender, EventArgs e)
{
ChangeTypeContact();
}
private void lstContact_DrawItem(object sender, DrawItemEventArgs e)
{
//Récupérer la couleur du radio correspondant
Color couleur;
e.DrawBackground();
Contact leContacts = lesContacts[e.Index];
if (leContacts.IsPersonne())
{
couleur = radioPerso.ForeColor;
}
else
{
couleur = radioEntreprise.ForeColor;
}
Brush brush = new SolidBrush(couleur);
e.Graphics.DrawString(lstContact.Items[e.Index].ToString(),
e.Font, brush, e.Bounds, StringFormat.GenericDefault);
}
private void searchNom_TextChanged(object sender, EventArgs e)
{
string query = searchNom.Text.ToLower();
searchPrenom.Text = "";
searchTel.Text = "";
if (searchNom.Text != "")
{
for (int i = 0; i < lstContact.Items.Count; i++)
{
Contact contact = (Contact)lstContact.Items[i];
string toTest = contact.getNom().ToLower();
//Debug.WriteLine(toTest);
if (toTest.Contains(query))
{
lstContact.SelectedIndex = i;
}
}
}
}
private void searchPrenom_TextChanged(object sender, EventArgs e)
{
string query = searchPrenom.Text.ToLower();
searchNom.Text = "";
searchTel.Text = "";
if (searchPrenom.Text != "")
{
for (int i = 0; i < lstContact.Items.Count; i++)
{
Contact contact = (Contact)lstContact.Items[i];
string toTest;
if (contact.getPrenom() != null)
{
toTest = contact.getPrenom().ToLower();
}
else
{
toTest = "";
}
//Debug.WriteLine(toTest);
if (toTest.Contains(query))
{
lstContact.SelectedIndex = i;
}
}
}
}
private void searchTel_TextChanged(object sender, EventArgs e)
{
string query = searchTel.Text;
searchNom.Text = "";
searchPrenom.Text = "";
if (searchTel.Text != "")
{
for (int i = 0; i < lstContact.Items.Count; i++)
{
Contact contact = (Contact)lstContact.Items[i];
string toTest;
if (contact.getTel() != null)
{
toTest = contact.getTel().ToLower();
}
else
{
toTest = "";
}
//Debug.WriteLine(toTest);
if (toTest.Contains(query))
{
lstContact.SelectedIndex = i;
}
}
}
}
}
}