Creare variabili su myproject impostazioni con comando my.settings

di il
6 risposte

Creare variabili su myproject impostazioni con comando my.settings

salve ho imparato da poco ad usare il comando my.settings per il salvataggio, la mia domanda è: posso popolare il pannello impostazioni da codice? se io volessi creare una variabile sul luogo della foto, posso farlo tramite codice oppure posso farlo solo da questo pannello? spero che la mia domanda possa essere capita facilmente. attendendo risposta cordiali saluti

6 Risposte

  • Re: Creare variabili su myproject impostazioni con comando my.settings

    La mia risposta è: dipende.

    Il tutto sta in cosa intendi con “popolarlo da codice”. 

    Se vuoi riempirlo in automatico tramite una applicazione e renderlo disponibile al momento della compilazione o dello sviluppo, si. Puoi farlo senza problemi.

    Se invece il tuo intento è quello di creare le varie proprietà a runtime, quello è un altro paio di maniche. Riesci a crearle, valorizzarle ed usarle. Hai solo un inconveniente: i valori non persisteranno tra una esecuzione e l'altra dell'applicazione.

    C'era una discussione in cui i aveva aiutato Alka, ma non ricordo se in questo forum o altrove. Se la trovo te la linko.

  • Re: Creare variabili su myproject impostazioni con comando my.settings

    05/01/2023 - Sgrubak ha scritto:


    La mia risposta è: dipende.

    Il tutto sta in cosa intendi con “popolarlo da codice”. 

    Se vuoi riempirlo in automatico tramite una applicazione e renderlo disponibile al momento della compilazione o dello sviluppo, si. Puoi farlo senza problemi.

    Se invece il tuo intento è quello di creare le varie proprietà a runtime, quello è un altro paio di maniche. Riesci a crearle, valorizzarle ed usarle. Hai solo un'inconveniente: i valori non persisteranno tra una esecuzione e l'altra dell'applicazione.

    C'era una discussione in cui i aveva aiutato Alka, ma non ricordo se in questo forum o altrove. Se la trovo te la linko.

    salve e grazie per la risposta, intendo dire questo: andando su impostazioni si possono creare delle variabili che una volta usate resteranno salvate alla chiusura dell'applicazione, fin qui mi sembra tutto chiaro, posso creare queste variabili non dal pannello impostazioni ma da codice che però hanno la stessa prorietà di salvataggio? per popolare intendo proprio questo, anzichè crearle da impostazioni le voglio creare da codice. spero sia stato chiaro

  • Re: Creare variabili su myproject impostazioni con comando my.settings

    05/01/2023 - xela1103 ha scritto:


    posso creare queste variabili non dal pannello impostazioni ma da codice che però hanno la stessa prorietà di salvataggio? 

    Si, ma non dalla stessa applicazione che stai sviluppando. A runtime, le modifiche (intendo aggiunta o rimozione di proprietà) al file Settings.settings non sono persistenti tra una sessione e l'altra.

    Potresti pensare di sviluppare un'estensione di VS che crei in automatico le proprietà, facendo una scansione di tutti gli oggetti di cui ti interessa mantenere le impostazioni. Così prima della compilazione fai aggiornare quel file e non ci pensi più.

    Io avevo tentato tramite Extension Method in questo modo:

        public static class FormExtentions
        {
            public static void SalvaProprietaForm(this Form form)
            {
                //gruppo
                string nomeTipoForm = form.GetType().Name;
                string[] nomiProprieta = { nomeTipoForm + "Location", nomeTipoForm + "WindowsState" };
                foreach (string proprieta in nomiProprieta)
                {
                    try
                    {
                        Properties.Settings.Default[proprieta] = form.Location;
                    }
                    catch
                    {
                        CreaNuovaProprieta(proprieta, typeof(Point));
                        Properties.Settings.Default[proprieta] = form.Location;
                    }
                }
                Properties.Settings.Default.Save();
            }
            public static void CaricaProprietaForm(this Form form)
            {
                string nomeTipoForm = form.GetType().Name;
                string nomeProprieta = nomeTipoForm + "Location";
                try
                {
                    form.Location = (Point)Properties.Settings.Default[nomeProprieta];
                    nomeProprieta = nomeTipoForm + "WindowsState";
                    form.WindowState = (FormWindowState)Properties.Settings.Default[nomeProprieta];
                }
                catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Errore {1} per {0} ", nomeProprieta, ex.ToString()); }
            }
            private static void CreaNuovaProprieta(string nomeProprieta, Type tipoProprieta)
            {
                //Parte vecchia: non funziona se chiudo/riapro l'applicazione
                SettingsProperty property = new SettingsProperty(nomeProprieta);
                property.IsReadOnly = false;
                property.PropertyType = tipoProprieta;
                property.Provider = Properties.Settings.Default.Providers["LocalFileSettingsProvider"];
                property.Attributes.Add(typeof(UserScopedSettingAttribute), new UserScopedSettingAttribute());
                Properties.Settings.Default.Properties.Add(property);
                Properties.Settings.Default.Save();
                // Ricarico le proprietà
                Properties.Settings.Default.Reload();
                System.Diagnostics.Debug.WriteLine("Creata la proprietà {0} di tipo {1}", nomeProprieta, tipoProprieta);
            }
        }
    

    E funzionicchia… Nel Load di ogni form riportavo il metodo CaricaProprietaForm e nel FormClosing il metodo  SalvaProprietaForm che come vedi si gestiva da solo il caso in cui la proprietà non esiste. Dato che genera eccezione, la intercettavo andando a creare la proprietà mancante e poi valorizzandola.

    In questo modo, ogni volta che aprivo una form e la spostavo, quando la chiudevo creavo (se non esisteva) la proprietà per la Location (stavo ragionando anche sulla WindowsState, ma ho desistito) e ci salvavo la posizione della form. Quando riaprivo un'altra istanza di quella classe, allora me la ritrovavo dove avevo lasciato la precedente. Ma se chiudo e riapro l'app, tutto viene perso. Ogni prima istanza, partiva in posizione 0,0 (se non diversamente specificato tramite designer della form.

    Avrebbe più senso avere un proprio file di impostazioni su cui scrivere e leggere le varie proprietà, con lo stesso ragionamento, oppure, se ti appoggi ad un DB, creare una tabella dedicata che raccolga le impostazioni. Allora si che non hai problemi perché la persistenza la garantisci.

    Gestire direttamente il file Settings.settings a runtime non è possibile.

  • Re: Creare variabili su myproject impostazioni con comando my.settings

    05/01/2023 - Sgrubak ha scritto:


    05/01/2023 - xela1103 ha scritto:


    posso creare queste variabili non dal pannello impostazioni ma da codice che però hanno la stessa prorietà di salvataggio? 

    Si, ma non dalla stessa applicazione che stai sviluppando. A runtime, le modifiche (intendo aggiunta o rimozione di proprietà) al file Settings.settings non sono persistenti tra una sessione e l'altra.

    Potresti pensare di sviluppare un'estensione di VS che crei in automatico le proprietà, facendo una scansione di tutti gli oggetti di cui ti interessa mantenere le impostazioni. Così prima della compilazione fai aggiornare quel file e non ci pensi più.

    Io avevo tentato tramite Extension Method in questo modo:

        public static class FormExtentions
        {
            public static void SalvaProprietaForm(this Form form)
            {
                //gruppo
                string nomeTipoForm = form.GetType().Name;
                string[] nomiProprieta = { nomeTipoForm + "Location", nomeTipoForm + "WindowsState" };
                foreach (string proprieta in nomiProprieta)
                {
                    try
                    {
                        Properties.Settings.Default[proprieta] = form.Location;
                    }
                    catch
                    {
                        CreaNuovaProprieta(proprieta, typeof(Point));
                        Properties.Settings.Default[proprieta] = form.Location;
                    }
                }
                Properties.Settings.Default.Save();
            }
            public static void CaricaProprietaForm(this Form form)
            {
                string nomeTipoForm = form.GetType().Name;
                string nomeProprieta = nomeTipoForm + "Location";
                try
                {
                    form.Location = (Point)Properties.Settings.Default[nomeProprieta];
                    nomeProprieta = nomeTipoForm + "WindowsState";
                    form.WindowState = (FormWindowState)Properties.Settings.Default[nomeProprieta];
                }
                catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Errore {1} per {0} ", nomeProprieta, ex.ToString()); }
            }
            private static void CreaNuovaProprieta(string nomeProprieta, Type tipoProprieta)
            {
                //Parte vecchia: non funziona se chiudo/riapro l'applicazione
                SettingsProperty property = new SettingsProperty(nomeProprieta);
                property.IsReadOnly = false;
                property.PropertyType = tipoProprieta;
                property.Provider = Properties.Settings.Default.Providers["LocalFileSettingsProvider"];
                property.Attributes.Add(typeof(UserScopedSettingAttribute), new UserScopedSettingAttribute());
                Properties.Settings.Default.Properties.Add(property);
                Properties.Settings.Default.Save();
                // Ricarico le proprietà
                Properties.Settings.Default.Reload();
                System.Diagnostics.Debug.WriteLine("Creata la proprietà {0} di tipo {1}", nomeProprieta, tipoProprieta);
            }
        }
    

    E funzionicchia… Nel Load di ogni form riportavo il metodo CaricaProprietaForm e nel FormClosing il metodo  SalvaProprietaForm che come vedi si gestiva da solo il caso in cui la proprietà non esiste. Dato che genera eccezione, la intercettavo andando a creare la proprietà mancante e poi valorizzandola.

    In questo modo, ogni volta che aprivo una form e la spostavo, quando la chiudevo creavo (se non esisteva) la proprietà per la Location (stavo ragionando anche sulla WindowsState, ma ho desistito) e ci salvavo la posizione della form. Quando riaprivo un'altra istanza di quella classe, allora me la ritrovavo dove avevo lasciato la precedente. Ma se chiudo e riapro l'app, tutto viene perso. Ogni prima istanza, partiva in posizione 0,0 (se non diversamente specificato tramite designer della form.

    Avrebbe più senso avere un proprio file di impostazioni su cui scrivere e leggere le varie proprietà, con lo stesso ragionamento, oppure, se ti appoggi ad un DB, creare una tabella dedicata che raccolga le impostazioni. Allora si che non hai problemi perché la persistenza la garantisci.

    Gestire direttamente il file Settings.settings a runtime non è possibile.

    ti ringrazio per il tuo interesse, ma io sono un novizio nel mondo della programmazione, il codice che vedo non è della mia portata, anche perchè lo scriverei a pappagallo senza capirne il suo utilizzo. purtroppo cerco da tempo un modo per imparare ad essere indipendente nel programmare ma senza successo, hai dei consigi sul metodo di studio e quale materiale utilizzare?

  • Re: Creare variabili su myproject impostazioni con comando my.settings

    1) Evita l'overquoting; Basta che selezioni la parte di testo del messaggio a cui vuoi rispondere e clicki sul tasto “Cita”.

    2)

    05/01/2023 - xela1103 ha scritto:


    cerco da tempo un modo per imparare ad essere indipendente nel programmare ma senza successo, hai dei consigi sul metodo di studio e quale materiale utilizzare?

    In primo luogo: Libri. Subito appresso la guida ufficiale Microsoft. E soprattutto, dato che stai iniziando, ti suggerirei il C# invece del VB.NET.

  • Re: Creare variabili su myproject impostazioni con comando my.settings

    07/01/2023 - Sgrubak ha scritto:


    1) Evita l'overquoting; Basta che selezioni la parte di testo del messaggio a cui vuoi rispondere e clicki sul tasto “Cita”.

    2)

    05/01/2023 - xela1103 ha scritto:


    cerco da tempo un modo per imparare ad essere indipendente nel programmare ma senza successo, hai dei consigi sul metodo di studio e quale materiale utilizzare?

    In primo luogo: Libri. Subito appresso la guida ufficiale Microsoft. E soprattutto, dato che stai iniziando, ti suggerirei il C# invece del VB.NET.

    ciao e buon sabato, perchè mi consigli il c# anzichè il vb.net?

Devi accedere o registrarti per scrivere nel forum
6 risposte