覆盖一个变量并保留c#的值

本文关键字:保留 的值 变量 一个 覆盖 | 更新日期: 2023-09-27 17:52:50

如何创建一个初始未定义的变量(string name = "";),并且当用户选择一个值(在本例中是目录的路径)时,该值(path)保存在内存中,因此不需要再次输入。这个值应该被存储,这样当我的应用程序重新启动时,它仍然可用。

这是我的全局变量:
static class Global
{
    private static string path = "";
    public static string GlobalVar
    {
        get { return path; }
        set { path = value; }
    }
}

这是我的按钮动作:

private void button1_Click(object sender, EventArgs e)
{
    FolderBrowserDialog FBD = new FolderBrowserDialog();
    if (FBD.ShowDialog() == DialogResult.OK)
    {
        textBox1.Text = FBD.SelectedPath;
        Global.GlobalVar = textBox1.Text;
    }
}

覆盖一个变量并保留c#的值

不存在"永久全局变量"这种东西。相反,应该使用。net框架的内置配置机制。

在Visual Studio中,打开项目属性并导航到选项卡"设置"。现在在右窗格上可能有一个链接,说明到目前为止还没有创建默认设置。点击链接创建设置

然后,通过输入名称和选择类型(string、int等)添加一个新的用户设置。确保它是用户设置,而不是应用程序设置,因为应用程序设置是只读的。从那时起,您可以像访问变量一样使用Properties.Settings.Default.SettingName访问此设置。

因此在程序/机器重启之间永久保存设置,使用Properties.Settings.Default.Save()

您可以使用ResourceManager来保存您的配置,当您停止程序时,它将开始正确加载设置,如下所示:

ResourceManager rm = new ResourceManager("RootResourceName",
                                         typeof(SomeClass).Assembly);
string path = rm.GetString("path");

您可以更新您的Global类,以确保值存储在注册表中,在(例如)HKEY_CURRENT_USER下,所以:

public static class Global
{
    private static string path = "";
    public static string GlobalVar
    {
        get 
        { 
            if(String.IsNullOrWhiteSpace(path))
            {
                path = (string)Registry.GetValue(@"HKEY_CURRENT_USER'SOFTWARE'MyApplication", "DirectoryPath", String.Empty); 
            }
            return path; 
        }
        set
        {
            path = value;
            Registry.SetValue(@"HKEY_CURRENT_USER'SOFTWARE'MyApplication", "DirectoryPath", path,
                                RegistryValueKind.String);
        }
    }
}