Come creare una Rubrica Telefonica in C# – #20 – Correzione bug

Come creare una Rubrica Telefonica in C# - Lezione 20 - Correzione dei bug

Come creare una Rubrica Telefonica in C# – Lezione 20: Correzione bug: Nuova lezione del corso di C#, nella quale andremo a correggere 3 bug riscontrati nella lezione precedente.

È passato 1 mese dall’ultima lezione, ma recuperiamo subito andando a correggere 3 bug relativamente gravi dell’ultima versione.

Infatti la rubrica telefonica vista nella lezione 19 aveva un grave problema con il database, cioè se l’utente selezionava una sotto cartella, il database non veniva trovato e ne veniva creato uno nuovo all’interno del precedente.

Inoltre mi avete segnalato la presenza di un bug con i nuovi database, in questo caso i pulsanti Modifica Contatto e Rimuovi Contatto, rimanevano funzionanti, e non trovando nessun contatto portavano al crash del programma.

Come ultima correzione andremo a modificare la funzione che aggiunge e rimuove la voce per l’avvio automatico nel registro di Windows.

In questo caso il bug è meno evidente, perchè non porta a malfunzionamenti del software ma va ad eseguire un’operazione inutile perchè prova a rimuovere la voce anche se non presente, e la aggiunge nuovamente anche se è già presente.

Come creare una Rubrica Telefonica in C# Correzione bug

Operazioni con il registro di Windows

Iniziamo la correzione dei bug, partendo dalla verifica sulle chiavi di registro, infatti nella versione precedente non effettuavamo nessuna verifica sul registro, eseguivamo le modifiche direttamente.

Scrivendo il seguente codice, andremo a creare una variabile che contiene la chiave di registro con tutti i suoi valori, e tramite GetValue possiamo andare a leggere un valore in particolare.

Microsoft.Win32.RegistryKey chiaveregistro = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
                    if (chiaveregistro.GetValue("RubricaTelefonica") != null)
                    {
                        chiaveregistro.DeleteValue("RubricaTelefonica", false);
                    }

Utilizzando la funzione GetValue andiamo a verificare che il valore esista, se quindi il risultato sarà diverso da null, potremo andare a rimuovere il relativo valore.

Infatti se il valore non dovesse essere presente, avremo come risultato null.

Disattivare i pulsanti Modifica Contatto e Rimuovi Contatto

Questi 2 pulsanti, così come le 2 voci di menù, servono per eseguire operazioni sui contatti esistenti nel database.

Quindi se il database è nuovo e non sono presenti contatti, la pressione di uno di questi 2 tasti porterà al crash del programma.

In questo caso possiamo eseguire diverse operazioni, possiamo aggiungere una verifica all’interno del codice dei pulsanti, che in caso vengano premuti, eseguiranno operazioni solo se sono presenti dei contatti.

In alternativa possiamo disattivare i pulsanti, e renderli attivi solo quando sono presenti dei contatti.

//CONTROLLA SE SONO PRESENTI DEI CONTATTI
            if (tabella_rubrica.Rows.Count > 0)
            {
                strumenti_modificacontatto.Enabled = true;
                strumenti_rimuovicontatto.Enabled = true;
                menu_modificacontatto.Enabled = true;
                menu_rimuovicontatto.Enabled = true;
            }

Tramite questo codice andiamo a verificare se la tabella contiene dei contatti, e se li contiene, attiviamo i pulsanti.

Ovviamente l’impostazione Enabled, dovrà essere impostata su false dal Designer, e poi via codice la impostiamo su true quando ci sono di contatti.

Come controllare la cartella selezionata dall’utente

L’ultimo bug è quello relativo alla cartella del database.

Infatti se l’utente non selezionava la cartella esatta, il software creava ulteriori sottocartelle all’interno del database.

Per correggere questo bug, dovremo andare a verificare quale cartella ha selezionato l’utente.

public static void controlla_database_utente() {
        if (RubricaTelefonica.Properties.Settings.Default.percorso_database != "")
        {
            percorso_database = RubricaTelefonica.Properties.Settings.Default.percorso_database;

            if (percorso_database.EndsWith(@"\RubricaTelefonica\Database\") == false && percorso_database.EndsWith(@"\RubricaTelefonica\Database") == false)
            {
                if (percorso_database.EndsWith(@"\RubricaTelefonica\") == true || percorso_database.EndsWith(@"\RubricaTelefonica") == true)
                {
                    percorso_database = RubricaTelefonica.Properties.Settings.Default.percorso_database + @"\Database\";
                }
                else {
                    percorso_database = RubricaTelefonica.Properties.Settings.Default.percorso_database + @"\RubricaTelefonica\Database\";
                }
                
            }
            
            percorso_database_foto = percorso_database + @"\pics\";
        }
    }

Per poterlo fare avremo bisogno di utilizzare diverse condizioni.

Verificheremo prima che le cartelle non abbiano come sotto cartelle \RubricaTelefonica\Database\ in questo caso andremo a verificare che non abbiano neanche solamente la cartella \RubricaTelefonica\

Modificando la funzione aggiungendo queste verifiche, eviteremo che il nostro software aggiunga le sottocartelle RubricaTelefonica e Database, se queste sono già presenti nel percorso.

author avatar
Claudio Masci
Sono innanzitutto un appassionato di informatica e tecnologia in generale. Lavoro in ambito informatico da circa 16 anni, spaziando in diversi campi, andando dalla programmazione web, allo sviluppo di software, dalla grafica alla modellazione 3d ed al video editing, ho sempre voluto approfondire ogni aspetto e questo mi ha permesso di lavorare in diversi ambiti informatici.