Сохраняйте переменные между выполнениями программы - PullRequest
1 голос
/ 11 мая 2019

Прошу прощения, если это глупый вопрос.Я все еще начинающий программист.

Я делаю программу для Windows Forms, в которой есть кнопка, которая увеличивает переменную с каждым нажатием кнопки.

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

Я хочу, чтобы переменная сохранялась между выполнениями программы.Например, пользователь 1 нажимает кнопку несколько раз до 7 и закрывает программу.Затем пользователь 2 открывает программу и набирает номер 7, а не 0.

Ответы [ 4 ]

1 голос
/ 11 мая 2019

Ну, это не лучшее решение, но для новичка все в порядке, вы можете записывать свои данные в файл и читать их каждый раз, когда ваше приложение открывается как это:

сначала определите int num; выходит за рамки функции, например, вот так:

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();
}

и для чтения вставьте это в форму load

//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();

помните, что это не лучший способ, вы скоро узнаете лучшие решения!

0 голосов
/ 11 мая 2019

Это встроенный механизм для этого, называемый Application Settings.

Итак, у вас есть форма с двумя метками, из которых Label2 содержит значение.Кнопка button1 увеличивает значение.

design

Перейдите к настройкам проекта и создайте одну настройку string с именем CounterText.

.

settings

Теперь нам нужны три обработчика событий для формы.

  1. Когда форма загружается, мы хотим подключитьсодержимое label2 с настройкой 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. Когда форма закрывается, вы хотите сохранить настройки

    protected override void OnClosing(CancelEventArgs e)
    {
        base.OnClosing(e);
    
        //  Save the settings before exit
        Properties.Settings.Default.Save();
    }
    
  3. При нажатии кнопки вы хотите увеличить значение в настройках

    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.
        }
    }
    

Теперь каждый раз, когда запускается форма, она будет читать настройки приложения и устанавливать значение текстаобозначить правильно.Также при нажатии кнопки и изменении настройки метка обновляется автоматически, поскольку, если определено DataBindings.

screenshot


Чтов фоновом режиме происходит то, что файл XML сохраняется в %appdata%\Local\WindowsFormsApp1\1.0.0.0\user.config или как бы там ни было название вашего приложения.Содержимое выглядит следующим образом:

<?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>

В этом случае ясно видно, что значение CounterText сохраняется как 3.Этот файл считывается при запуске программы (автоматически) и обновляется при ее завершении (вручную).

0 голосов
/ 11 мая 2019

Вы можете использовать INI-файл и сделать запись для каждой необходимой переменной. Посмотрите на Чтение / запись файла INI .

0 голосов
/ 11 мая 2019

Способ сделать это - использовать отдельный файл или базу данных для хранения данных при закрытии приложения и чтения их при открытии приложения. Поскольку вы храните только одно значение, база данных будет излишней, поэтому я бы рекомендовал использовать отдельный файл. Более подробную информацию о чтении и записи в файл можно найти по этому вопросу, опубликованному другим пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...