Pido disculpas si esta es una pregunta estúpida. Todavía soy muy principiante en programación.

Estoy creando un programa de formularios Windows Forms, en el que hay un botón que aumenta una variable con cada pulsación de botón.

        private void CmdAdd_Click(object sender, EventArgs e)
        {    
            int num;
            num ++;
            LblNum.Text = (Convert.ToString(num));
        }

Quiero que la Variable se guarde entre ejecuciones del programa. Por ejemplo, el usuario 1 presiona el botón varias veces hasta 7 y cierra el programa. El usuario 2 luego abre el programa y el número es 7 y no 0.

1
eSeL 11 may. 2019 a las 16:48

4 respuestas

La mejor respuesta

Bueno, esta no es la mejor solución, pero para el principiante está bien, puede escribir sus datos en un archivo y leerlos cada vez que su aplicación se abra así:

Primero define int num; fuera del alcance de la función, por ejemplo, encima de esta manera:

int num;

private void CmdAdd_Click(object sender, EventArgs e)
{    
    num ++;
    LblNum.Text = (Convert.ToString(num));

    //Pass the filepath and filename to the StreamWriter Constructor
    StreamWriter sw = new StreamWriter("C:\\Test.txt");

    //Write a line of text
    sw.WriteLine(LblNum.Text);

    //Close the file
    sw.Close();
}

Y para leer pon esto en tu formulario de carga

//Pass the file path and file name to the StreamReader constructor
StreamReader sr = new StreamReader("C:\\Test.txt");

//Read the first line of text
line = sr.ReadLine();
num= Int32.Parse(line);
//Continue to read until you reach end of file

//close the file
sr.Close();

Recuerde que esta no es la mejor manera, ¡pronto aprenderá las mejores soluciones!

1
Olivier Jacot-Descombes 11 may. 2019 a las 14:28

La forma de hacerlo sería usar un archivo separado o una base de datos para almacenar los datos al cerrar la aplicación y leerlos en la aplicación abierta. Debido a que está almacenando solo un valor, una base de datos sería exagerada, por lo que recomendaría usar un archivo separado. Puede encontrar más información sobre cómo leer y escribir en un archivo de esta pregunta publicado por otro usuario.

0
AnonymousTJ 11 may. 2019 a las 13:59

Este es un mecanismo incorporado para esto, llamado Application Settings.

Entonces tiene un formulario con dos etiquetas, de las cuales Label2 contiene el valor. El botón button1 incrementa el valor.

design

Vaya a la configuración del proyecto y cree una configuración string llamada CounterText.

settings

Ahora necesitamos tres controladores de eventos para el formulario.

  1. Cuando se carga el formulario, queremos conectar el contenido de label2 con la configuración CounterText

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
    
        // Update the label automatically from the setting
        label2.DataBindings.Add("Text", Properties.Settings.Default, "CounterText", true, 
                                       DataSourceUpdateMode.OnPropertyChanged);
    }
    
  2. Cuando se cierra el formulario, desea guardar la configuración

    protected override void OnClosing(CancelEventArgs e)
    {
        base.OnClosing(e);
    
        //  Save the settings before exit
        Properties.Settings.Default.Save();
    }
    
  3. Cuando se hace clic en el botón, desea incrementar el valor en la configuración

    private void button1_Click(object sender, EventArgs e)
    {
        // Read the setting value (string->int)
        if (int.TryParse(Properties.Settings.Default.CounterText, out int num))
        {
            // Increment value
            num++;
            // Update the setting (int->string)
            Properties.Settings.Default.CounterText = num.ToString();
            // The system will automatically update the label text.
        }
    }
    

Ahora, cada vez que se ejecuta el formulario, leerá la configuración de la aplicación y establecerá el valor de la etiqueta de texto correctamente. Además, cuando se presiona el botón y se cambia la configuración, la etiqueta se actualiza automáticamente porque si se definió DataBindings.

screenshot


Lo que sucede en segundo plano es que un archivo XML se guarda en %appdata%\Local\WindowsFormsApp1\1.0.0.0\user.config o cualquiera que sea el nombre de su aplicación. Los contenidos son los siguientes:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <userSettings>
        <WindowsFormsApp1.Properties.Settings>
            <setting name="CounterText" serializeAs="String">
                <value>3</value>
            </setting>
        </WindowsFormsApp1.Properties.Settings>
    </userSettings>
</configuration>

Puede ver claramente el valor de CounterText que se guarda como 3 en este caso. Este archivo se lee cuando el programa se inicia (automáticamente) y se actualiza cuando el programa finaliza (manualmente).

0
ja72 11 may. 2019 a las 16:29

Puede usar un archivo INI y hacer una entrada para cada variable que necesite. Mire Lectura / escritura de un archivo INI.

0
John 11 may. 2019 a las 15:34