//Aggiunta di un nuovo menu
        private void button1_Click(object sender, EventArgs e)
        {
            //Innanzitutto controllo se sono già presenti altri menu
            if (phoneBook.size() > 0)
            {
                //Poi controllo che l'utente abbia inserito almeno un contatto nel menu corrente
                bool b = false;

                //Scorro tutti i menu per controllare che su tutti ci sia almeno un contatto
                for (i = 0; i < phoneBook.size(); i++)
                {
                    //Se non ci sono elementi in questo menu allora esco dal ciclo e lo comunico all'utente
                    if (dataGridView1.Rows.Count == 1)
                    {
                        b = true;
                        break;
                    }
                }

                //Comunico all'utente e non gli permetto di aggiungere un menu
                if (b)
                {
                    //Messaggio di errore
                    MessageBox.Show("Inserire almeno un contatto per Menu!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    //Controllo che il nome del menu non sia vuoto
                    if (!string.IsNullOrWhiteSpace(newMenuNameTextBox.Text))
                    {
                        if (phoneBook.size() > 0)
                        {
                            phoneBook.get(menuComboBox.SelectedIndex).clear();
                        }

                        //Controllo che ci sia almeno una riga nella tabella
                        if (dataGridView1.Rows.Count - 1 > 0)
                        {
                            //Salvo tutti i contatti del menu corrente nel menu corrispondente
                            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                            {
                                string[] str = new string[] { "", "", "", "" };

                                //Scorro le 4 colonne della tabella
                                for (int l = 0; l < 4; l++)
                                {
                                    try {
                                        str[l] = (string)dataGridView1.Rows[i].Cells[l + 1].Value.ToString();
                                    } catch (NullReferenceException exc) { }
                                }

                                phoneBook.get(menuComboBox.SelectedIndex).add(new Contatto(HttpUtility.HtmlEncode(str[0]), str[1], str[2], str[3]));
                            }
                        }

                        //Creo un nuovo menu
                        phoneBook.add(newMenuNameTextBox.Text);

                        //Aggiungo un nuovo menu al combobox
                        menuComboBox.Items.Add(newMenuNameTextBox.Text);

                        //Cambio il menu visualizzato nella tabella
                        menuComboBox.SelectedIndex = phoneBook.size() - 1;
                        showUnits(phoneBook.size() - 1);

                        //Visualizzazione messaggio di conferma
                        MessageBox.Show("Menu aggiunto correttamente!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        //Visualizzazione messaggio di errore
                        MessageBox.Show("Il nome non può contenere solo spazi!", "ERRORE", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            else
            {
                //Controllo che il nome del menu non sia vuoto
                if (!string.IsNullOrWhiteSpace(newMenuNameTextBox.Text))
                {
                    if (phoneBook.size() > 0)
                    {
                        phoneBook.get(menuComboBox.SelectedIndex).clear();
                    }

                    //Controllo che ci sia almeno una riga nella tabella
                    if (dataGridView1.Rows.Count - 1 > 0)
                    {
                        //Salvo tutti i contatti del menu corrente nel menu corrispondente
                        for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                        {
                            string[] str = new string[] { "", "", "", "" };

                            //Scorro le 4 colonne della tabella
                            for (int l = 0; l < 4; l++)
                            {
                                try {
                                    str[l] = (string)dataGridView1.Rows[i].Cells[l + 1].Value.ToString();
                                } catch (NullReferenceException exc) {}
                            }

                            phoneBook.get(menuComboBox.SelectedIndex).add(new Contatto(HttpUtility.HtmlEncode(str[0]), str[1], str[2], str[3]));
                        }
                    }

                    //Creo un nuovo menu
                    phoneBook.add(newMenuNameTextBox.Text);

                    //Aggiungo un nuovo menu al combobox
                    menuComboBox.Items.Add(newMenuNameTextBox.Text);

                    //Cambio il menu visualizzato nella tabella
                    menuComboBox.SelectedIndex = phoneBook.size() - 1;
                    showUnits(phoneBook.size() - 1);

                    //Visualizzazione messaggio di conferma
                    MessageBox.Show("Menu aggiunto correttamente!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    //Visualizzazione messaggio di errore
                    MessageBox.Show("Il nome non può contenere solo spazi!", "ERRORE", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            lastPhonebookSize = phoneBook.size();
        }
        //Operazioni che vengono effettuate all'avvenuta apertura di una rubrica da file XML
        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            //Inizialmente i bottoni precedente e successivo sono disattivati
            nextButton.Enabled     = false;
            previousButton.Enabled = false;
            label2.Text            = "";

            //All'apertura di un file pulisco prima la tabella e la combobox
            //per evitare che i nuovi dati si aggiungano a quelli di un file
            //aperto in precedenza
            dataGridView1.Rows.Clear();
            phoneBook = new Rubrica();
            menuComboBox.Items.Clear();

            //Creo un nuovo documento xml
            XmlDocument xmlDoc = new XmlDocument();

            //Ottengo il file scelto in apertura
            XmlFile.file = openFileDialog1.FileName;

            //Modifico il titolo della finestra
            this.Text = "Editor Rubrica - " + XmlFile.file;

            //Modifico il percorso di salvataggio di default
            using (RegistryKey tempKey = phoneBookEditor.OpenSubKey("FileSavePath", RegistryKeyPermissionCheck.ReadWriteSubTree)) {
                //Inserisco la stringa del percorso di salvataggio all'interno della chiave di registro
                tempKey.SetValue("Path", @XmlFile.file);
            }

            //Carico il file XML scelto
            xmlDoc.Load(@XmlFile.file);

            //Creazione lista dei nodi dei menu
            XmlNodeList menuList = xmlDoc.SelectNodes("/YealinkIPPhoneBook/Menu");

            //Scorro tutti i nodi menu e li aggiungo alla lista di menu (Rubrica)
            foreach (XmlNode node in menuList)
            {
                phoneBook.add(node.Attributes["Name"].Value);
                //Aggiungo i vari menu al menu a tendina
                menuComboBox.Items.Add(node.Attributes["Name"].Value);
            }

            //Lista dei nodi a partire dal percorso indicato
            XmlNodeList unitList = xmlDoc.SelectNodes("/YealinkIPPhoneBook/Menu/Unit");

            i = 0;
            l = 0;

            //Stringhe temporanee per controllare se devo scorrere la lista dei menu
            string temp  = "";
            string temp2 = "";

            temp = phoneBook.get(l).getName();

            //Intero utile per riprendere a scorrere la lista dei contatti da dove mi ero fermato
            int util = 0;

            //Scorro tutti i menu presenti nella rubrica
            for (i = 0; i < phoneBook.size(); i++)
            {
                //Scorro tutti i contatti del menu corrente
                for (l = util; l < unitList.Count; l++)
                {
                    //Aggiungo i contatti al menu corrente
                    phoneBook.get(i).add(new Contatto(/*HttpUtility.HtmlDecode*/ (unitList.Item(l).Attributes["Name"].Value),
                                                      unitList.Item(l).Attributes["Phone1"].Value,
                                                      unitList.Item(l).Attributes["Phone2"].Value,
                                                      unitList.Item(l).Attributes["Phone3"].Value));


                    //Controllo se ho raggiunto la fine dei menu
                    if ((i < (phoneBook.size() - 1)) && (phoneBook.size() > 1))
                    {
                        //Ottengo il nome del menu del contatto corrente e di quello successivo
                        temp  = unitList.Item(l).ParentNode.Attributes["Name"].Value;
                        temp2 = unitList.Item(l + 1).ParentNode.Attributes["Name"].Value;

                        //Se il nome del menu è diverso tra i 2 allora passo al menu successivo
                        if (!temp.Equals(temp2))
                        {
                            break;
                        }
                    }
                }

                //Salvo l'indice della lista da dove mi ero fermato per poterla poi riprendere
                util = l + 1;
            }

            //Carico tutti i dati nel programma
            showUnits(0);

            //Seleziono nel menu a tendina il primo menu disponibile e visualizzo il suo contenuto
            menuComboBox.SelectedIndex = 0;

            //Conferma apertura
            MessageBox.Show("Apertura completata!", "Completato", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }