在程序执行之间保存变量

时间:2019-05-11 13:48:33

标签: c# winforms

如果这是一个愚蠢的问题,我深表歉意。我仍然是编程的真正初学者。

我正在制作一个Windows Forms程序,其中是一个按钮,每按一次该按钮都会增加一个Variable。

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

我希望在程序执行之间保存变量。例如,用户1多次按下按钮最多7次,然后关闭程序。然后,用户2打开程序,该数字为7而不是0。

4 个答案:

答案 0 :(得分:1)

这不是最好的解决方案,但是对于初学者来说还可以,您可以将数据写入文件中,并在每次打开应用程序时读取数据 像这样:

首先定义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();
}

为了阅读,将其放入表单中

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

请记住这不是最好的方法,您将很快学习更好的解决方案!

答案 1 :(得分:0)

执行此操作的方法是使用单独的文件或数据库在应用程序关闭时存储数据,并在应用程序打开时读取数据。因为您只存储一个值,所以数据库会显得过大,因此我建议使用单独的文件。 You can find more information about reading and writing to a file from this question posted by another user.

答案 2 :(得分:0)

您可以使用INI文件,并为所需的每个变量输入一个条目。看Reading/writing an INI file

答案 3 :(得分:0)

这是一种内置机制,称为Application Settings

因此,您有一个带有两个标签的表单,其中Label2保存该值。 button1按钮使值递增。

design

转到项目设置并创建一个名为string的{​​{1}}设置。

settings

现在,我们需要为表单提供三个事件处理程序。

  1. 加载表单时,我们希望将CounterText的内容与label2设置联系起来

    CounterText
  2. 关闭表单后,您要保存设置

    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);
    }
    
  3. 单击按钮时,您要增加设置中的值

    protected override void OnClosing(CancelEventArgs e)
    {
        base.OnClosing(e);
    
        //  Save the settings before exit
        Properties.Settings.Default.Save();
    }
    

现在,每次运行表单时,它将读取应用程序设置并正确设置文本标签的值。同样,当按下按钮并更改设置时,由于定义了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. } } ,标签也会自动更新。

screenshot


在后台发生的事情是XML文件保存在DataBindings下或您的应用程序名称是什么。内容如下:

%appdata%\Local\WindowsFormsApp1\1.0.0.0\user.config

在这种情况下,您可以清楚地看到CounterText的值另存为3。在程序启动时(自动)读取该文件,并在程序结束时(手动)更新该文件。