Domanda

Ho un " file di impostazioni " nella mia applicazione Winforms chiamata Settings.settings con una classe parziale per metodi personalizzati, ecc. C'è un modo per caricare / salvare le impostazioni dinamiche basate su chiavi arbitrarie?

Ad esempio, ho alcune ListView nella mia applicazione in cui voglio salvare / caricare le larghezze di colonna; Invece di creare un'impostazione di larghezza per ogni colonna per ciascuna vista elenco, vorrei un metodo semplice per caricare / salvare automaticamente le larghezze.

Di seguito è riportato un esempio del metodo salva che ho provato:

internal sealed partial class Settings
{
    public void SetListViewColumnWidths(ListView listView)
    {
        String baseKey = listView.Name;
        foreach (ColumnHeader h in listView.Columns)
        {
            String key = String.Format("{0}-{1}", baseKey, h.Index);
            this[key] = h.Width;
        }
    }
}

Quando eseguo quel codice viene visualizzato l'errore " La proprietà delle impostazioni 'TestsListView-0' non è stata trovata. " C'è qualcosa che mi manca?

È stato utile?

Soluzione

Memorizza le impostazioni della larghezza della colonna in un oggetto serializzabile Xml. Vale a dire, qualcosa che implementa IXmlSerializable , quindi crea una singola voce di impostazione di quel tipo in Settings.settings.

Una buona opzione sarebbe probabilmente un dizionario serializzabile Xml. Una rapida ricerca su Google ha trovato diversi post sul blog che descrivere come implementarlo.

Come indicato in altre risposte, è necessario assicurarsi che questo oggetto sia un'impostazione utente. Potrebbe anche essere necessario inizializzare l'istanza di impostazione. Vale a dire, creare un'istanza XmlSerializableDictionary () e assegnarla all'impostazione se l'impostazione è nulla. Il sottosistema delle impostazioni non crea istanze predefinite di oggetti di impostazione complessi.

Inoltre, se si desidera che queste impostazioni persistano tra le versioni dell'assembly (ovvero, siano aggiornabili) sarà necessario aggiornare le impostazioni all'avvio dell'applicazione. Questo è descritto in dettaglio su Miha Markic's blog e blog di Raghavendra Prabhu .

Altri suggerimenti

Penso che l'errore

  

La proprietà settings   'chiave' non è stata trovata.

si verifica perché il valore 'chiave' non esiste nel file delle impostazioni (abbastanza esplicativo).

Per quanto ne so, non è possibile aggiungere i valori delle impostazioni a livello di codice, potrebbe essere necessario investigare aggiungendo tutte le impostazioni necessarie al file dopo tutto, anche se una volta che sono lì, penso che sarai in grado per utilizzare il tipo di codice che hai fornito per salvare le modifiche.

Per salvare le modifiche, devi assicurarti che siano impostazioni "Utente", non "Applicazione".

Il file Impostazioni è un XML abbastanza semplice, quindi potresti essere in grado di attaccare il problema scrivendo l'XML direttamente nel file, ma non l'ho mai fatto, quindi non posso essere sicuro che funzioni, o necessariamente consiglia tale approccio.

http://msdn.microsoft.com/en-us/library /cftf714c.aspx è il collegamento MSDN per iniziare.

Puoi fare Settings.Save () o simili sulle impostazioni dell'utente, ma nota che tali impostazioni NON verrebbero mantenute nel file xxx.exe.config nella directory dell'app come ti aspetteresti. In realtà vanno da qualche parte nel profondo della cartella dell'utente (cerca l'unità xxx.exe.config per trovarla). La prossima volta che cambi manualmente xxx.exe.config nella directory dell'app, la modifica non si applica misteriosamente (il sistema sta ancora utilizzando quello salvato dalla directory dell'utente).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top