//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);
        }
        //Ascoltatore nel caso in cui vengano eliminate delle righe dalla tabella (contatti)
        void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            //var watch = System.Diagnostics.Stopwatch.StartNew();

            //Rimuovo il contatto anche dalla rubrica come oggetto e non solo dalla tabella di visualizzazione
            if (phoneBook.size() > 0)
            {
                if (phoneBook.get(0).size() > 0)
                {
                    phoneBook.get(menuComboBox.SelectedIndex).remove(Int32.Parse(e.Row.Index.ToString()));
                }
            }

            dataGridView1.Rows[e.Row.Index + 1].Selected = true;

            //watch.Stop();
            //label2.Text = watch.ElapsedMilliseconds.ToString();
        }