using Microsoft.EntityFrameworkCore;

namespace TP_Evaluation_Forms_IMBAUD_Florian
{
    public partial class Form1 : Form
    {
        int indexMinCourant = 0;
        int nombreAffichages = 0;
        int indexMin = 1;
        int indexMax = 0;

        bool popupDebut = false;
        bool popupFin = false;
        bool apparenceSourisBloquee = false;

        public Form1()
        {
            InitializeComponent();


            // tant qu'aucun intem de boiteListeAffichageTables n'est sélectionné, on ne peut pas sélectionner des boutons : on les désactive

            if (boiteListeAffichageTables.SelectedIndex == -1)
            {
                DesacitverTousBoutons();
            }
        }

        private void DesacitverTousBoutons()
        {
            bouton1Precedent.Enabled = false;
            bouton10000Precedent.Enabled = false;
            boutonPrecedentToute.Enabled = false;
            bouton1Suivant.Enabled = false;
            bouton10000Suivant.Enabled = false;
            boutonSuivantToute.Enabled = false;

            // On grise ces boutons 

            bouton1Precedent.BackColor = Color.DarkGray;
            bouton10000Precedent.BackColor = Color.DarkGray;
            boutonPrecedentToute.BackColor = Color.DarkGray;
            bouton1Suivant.BackColor = Color.DarkGray;
            bouton10000Suivant.BackColor = Color.DarkGray;
            boutonSuivantToute.BackColor = Color.DarkGray;

            apparenceSourisBloquee = true;
        }

        private void ActiverTousBoutons()
        {
            bouton1Precedent.Enabled = true;
            bouton10000Precedent.Enabled = true;
            boutonPrecedentToute.Enabled = true;
            bouton1Suivant.Enabled = true;
            bouton10000Suivant.Enabled = true;
            boutonSuivantToute.Enabled = true;

            // On remets la couleur d'origine des boutons
            bouton1Precedent.BackColor = SystemColors.Window;
            bouton10000Precedent.BackColor = SystemColors.Window;
            boutonPrecedentToute.BackColor = SystemColors.Window;
            bouton1Suivant.BackColor = SystemColors.Window;
            bouton10000Suivant.BackColor = SystemColors.Window;
            boutonSuivantToute.BackColor = SystemColors.Window;

            apparenceSourisBloquee = false;
        }

        private void AffichageDonnees()
        {
            using (var contexte = new AppDbContext())
            {
                var table = boiteListeAffichageTables.SelectedItem.ToString();
                switch (table)
                {
                    case "departments":
                        var departements = contexte.Departements.OrderBy(d => d.department_id).ToList();
                        indexMax = departements.Count;

                        CorrectionIndexesEtGestionPopup();

                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (indexMax >= 10000)
                        {
                            var departements10000 = departements.GetRange(indexMinCourant, nombreAffichages).ToList();
                            grilleDonneesTables.DataSource = departements10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = departements;
                        }
                        break;
                    case "employees":
                        var employes = contexte.Employes.OrderBy(e => e.employee_id).ToList();
                        indexMax = employes.Count;

                        CorrectionIndexesEtGestionPopup();

                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (employes.Count >= 10000)
                        {
                            // Ensuite, on affiche les employés de l'indice minimal courant, à l'indice maximal courant
                            var employees10000 = employes.GetRange(indexMinCourant, nombreAffichages).ToList();
                            grilleDonneesTables.DataSource = employees10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = employes;
                        }
                        break;
                    case "employee_projects":
                        var employeProjets = contexte.EmployeProjets.OrderBy(ep => ep.employee_id).ToList();
                        indexMax = employeProjets.Count;

                        CorrectionIndexesEtGestionPopup();

                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (employeProjets.Count >= 10000)
                        {
                            var employeProjets10000 = employeProjets.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = employeProjets10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = employeProjets;
                        }
                        break;
                    case "projects":
                        var projets = contexte.Projets.OrderBy(p => p.project_id).ToList();
                        indexMax = projets.Count;

                        CorrectionIndexesEtGestionPopup();

                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (indexMax >= 10000)
                        {
                            var projets10000 = projets.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = projets10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = projets;
                        }
                        break;
                    default:
                        break;
                }

                if (popupDebut)
                    MessageBox.Show("Vous êtes arrivé au début de la liste");

                if (popupFin)
                    MessageBox.Show("Vous êtes arrivé à la fin de la liste");
            }
        }

        private void CorrectionIndexesEtGestionPopup()
        {
            if (indexMinCourant >= indexMax || indexMinCourant + nombreAffichages >= indexMax)
            {
                indexMinCourant = indexMax - nombreAffichages;
                // On fait apparaître un popup après l'affichage des données pour signifier qu'on est à la fin
                popupDebut = false;
                popupFin = true;
            }
            else if (indexMinCourant < indexMin)
            {
                indexMinCourant = 0;
                // On fait apparaître un popup après l'affichage des données pour signifier qu'on est au début
                popupDebut = true;
                popupFin = false;
            }
            else
            {
                // On ne fera apparaître aucun popup
                popupDebut = false;
                popupFin = false;
            }
        }

        private void boutonPrecedentToute_MouseHover(object sender, EventArgs e)
        {
            if (apparenceSourisBloquee)
                Cursor = Cursors.No;
        }

        private void bouton10000Precedent_MouseHover(object sender, EventArgs e)
        {
            if (apparenceSourisBloquee)
                Cursor = Cursors.No;
        }

        private void bouton1Precedent_MouseHover(object sender, EventArgs e)
        {
            if (apparenceSourisBloquee)
                Cursor = Cursors.No;
        }

        private void bouton1Suivant_MouseHover(object sender, EventArgs e)
        {
            if (apparenceSourisBloquee)
                Cursor = Cursors.No;
        }

        private void bouton10000Suivant_MouseHover(object sender, EventArgs e)
        {
            if (apparenceSourisBloquee)
                Cursor = Cursors.No;
        }

        private void boutonSuivantToute_MouseHover(object sender, EventArgs e)
        {
            if (apparenceSourisBloquee)
                Cursor = Cursors.No;
        }

        private void bouton1Precedent_Click(object sender, EventArgs e)
        {
            indexMinCourant -= 1;
            nombreAffichages = 1;

            AffichageDonnees();
        }

        private void bouton10000Precedent_Click(object sender, EventArgs e)
        {
            indexMinCourant -= 10000;
            nombreAffichages = 10000;

            AffichageDonnees();
        }
        private void bouton10000PrecedentToute_Click(object sender, EventArgs e)
        {
            indexMinCourant = 0;
            nombreAffichages = 10000;

            AffichageDonnees();
        }

        private void bouton1Suivant_Click(object sender, EventArgs e)
        {
            indexMinCourant += 1;
            nombreAffichages = 1;

            AffichageDonnees();
        }

        private void bouton10000Suivant_Click(object sender, EventArgs e)
        {
            indexMinCourant += 10000;
            nombreAffichages = 10000;

            AffichageDonnees();
        }

        private void bouton10000SuivantToute_Click(object sender, EventArgs e)
        {
            indexMinCourant = int.MaxValue;
            nombreAffichages = 10000;

            AffichageDonnees();
        }

        /// <summary>
        /// Fonction permettant de se connecter à la base de données afin de charger la liste des tables
        /// </summary>
        private void boutonConnexionBDD_Click(object sender, EventArgs e)
        {
            using (var contexte = new AppDbContext())
            {
                // On charge la liste des tables
                var tables = contexte.Model.GetEntityTypes().Select(t => t.GetTableName()).ToList();
                boiteListeAffichageTables.Items.Clear();
                foreach (var table in tables)
                {
                    boiteListeAffichageTables.Items.Add(table);
                }
            }
        }

        private void boiteListeAffichageTables_SelectedIndexChanged(object sender, EventArgs e)
        {
            nombreAffichages = 10000;
            ActiverTousBoutons();

            // On affiche la table sélectionnée
            using (var contexte = new AppDbContext())
            {
                var table = boiteListeAffichageTables.SelectedItem.ToString();
                switch (table)
                {
                    case "departments":
                        grilleDonneesTables.Columns.Clear();
                        var departements = contexte.Departements.OrderBy(d => d.department_id).ToList();
                        indexMax = departements.Count - 1;
                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (indexMax >= 10000)
                        {
                            indexMinCourant = 0;

                            var departements10000 = departements.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = departements10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = departements;
                        }
                        break;
                    case "employees":
                        grilleDonneesTables.Columns.Clear();
                        var employes = contexte.Employes.OrderBy(e => e.employee_id).ToList();
                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (employes.Count >= 10000)
                        {
                            indexMinCourant = 0;
                            // Ensuite, on affiche les employés de l'indice minimal courant, à l'indice maximal courant
                            var employes10000 = employes.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = employes10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = employes;
                        }
                        break;
                    case "employee_projects":
                        grilleDonneesTables.Columns.Clear();
                        var employeProjets = contexte.EmployeProjets.OrderBy(ep => ep.employee_id).ToList();
                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (employeProjets.Count >= 10000)
                        {
                            indexMinCourant = 0;
                            var employeProjets10000 = employeProjets.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = employeProjets10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = employeProjets;
                        }
                        break;
                    case "projects":
                        grilleDonneesTables.Columns.Clear();
                        var projets = contexte.Projets.OrderBy(p => p.project_id).ToList();
                        indexMax = projets.Count - 1;
                        // Si il y a plus de 10000 données, on les affiche par page de 10000 dans grilleDonneesTable
                        if (indexMax >= 10000)
                        {
                            indexMinCourant = 0;
                            var projets10000 = projets.GetRange(indexMinCourant, nombreAffichages);
                            grilleDonneesTables.DataSource = projets10000;
                        }
                        else
                        {
                            grilleDonneesTables.DataSource = projets;
                        }
                        break;
                    default:
                        break;
                }
            }
        }
    }
}

Dans la fonction DesactiverBoutons(), je voudrais, au lieu de désactiver les boutons, comment pourrais-je faire ? Si je les désacitve, les méthodes de survol ne marchent pas