2009-07-12 72 views
0

我正在开发一个Windows应用程序。保留对背景颜色属性所做的更改

我有3种形式:

我想改变的所有3种形式由用户选择的颜色的背景色。

我已经使用了以下代码我可以更改背景颜色,但是当我退出应用程序并重新启动它时,我无法获取用户设置的颜色。我只获取默认颜色。

是否可以保留用户选择的颜色,并在用户重新启动应用程序时将其用作背景颜色。

CODE

在Form1

ColorDialog c1 = new ColorDialog(); 

    public static System.Drawing.Color bkc; 
    private void button1_Click(object sender, EventArgs e) 
    { 

     DialogResult res = c1.ShowDialog(); 
     if (res == DialogResult.OK) 
     { 
      bkc = c1.Color; 
      this.BackColor = bkc; 


      MessageBox.Show(Convert.ToString(bkc)); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     Form2 obj1 = new Form2(); 
     obj1.BackColor = bkc; 
     obj1.Show(); 
    } 

在表格2 CODE

private void button2_Click(object sender, EventArgs e) 
    { 
     Form3 obj1 = new Form3(); 
     obj1.Show(); 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 
     this.BackColor = Form1.bkc; 

    } 

在Form3 CODE

private void button2_Click(object sender, EventArgs e) 
    { 
     Form1 obj1 = new Form1(); 
     obj1.Show(); 
    } 

    private void Form3_Load(object sender, EventArgs e) 
    { 
     //Form1 obj2 = new Form1(); 
     this.BackColor = Form1.bkc; 
    } 

在颜色对话框中,我选择一种颜色并按下确定按钮,颜色也会改变,但是当我重新启动应用程序时,我没有得到使用颜色对话框设置的颜色。我想保留此设置,以便用户可以获取每次执行应用程序时不需要重新设置所需的颜色。

上述代码不会产生任何错误。

任何人都可以帮助我完成这项任务吗?

在此先感谢!

回答

-1

你正在做错误的方式。

应用程序如何记住用户选择的背景颜色?
该应用程序在内存中运行&显示选择的背景颜色直到终止。

阅读this &把它转发。

编辑:此外,Form2中使用Form1.BackColor是不正确的事情。
打开Form1,更改backcolor,关闭Form1 &打开Form2以查看会发生什么(您可能会看到Form1再次打开)。

+1

应用程序设置模式并不是*最后一个开发人员,他们对用户设置的想法应该看起来很陌生,但它很接近。 – 2009-07-12 20:01:54

+0

我没有太多有关设置文件的知识。有没有其他方法? – Sheetal 2009-07-14 13:23:25

3

您需要的值保存在某个地方,如Application.exe.config

// Open App.Config of executable 
    System.Configuration.Configuration config = 
    ConfigurationManager.OpenExeConfiguration 
       (ConfigurationUserLevel.None); 

    // Add an Application Setting. 
    config.AppSettings.Settings.Add("BackgroundColour", 
        bkc + " "); 

    // Save the changes in App.config file. 
    config.Save(ConfigurationSaveMode.Modified); 

    // Force a reload of a changed section. 
    ConfigurationManager.RefreshSection("appSettings"); 

这里是一个C#完整的代码示例:Using System.Configuration.ConfigurationManager Example

+0

老兄,你写这段代码的方式很快,我必须说:) – shahkalpesh 2009-07-12 07:01:40

0

你为什么不创建一个事件,所有三种形式听取和让他们在听“更改颜色”事件时更改背景颜色?您可以将颜色存储在一个静态变量中,这样当表单加载时,背景色可以设置为存储在变量中。

为了让屏幕记住颜色设置,为什么不将选择的颜色存储在用户首选项文件中?尝试使用“IsolatedStorage”功能来保存首选项文件。

1

使用应用程序配置文件的建议很接近,但它有两个错误。

首先,应用程序的所有用户共享相同的应用程序配置文件。如果您有多个用户(在网络上,或同一台计算机上的不同用户),将用户的首选项存储在应用程序配置文件中将会更改所有用户的设置。第二件错误的事情是,在Vista上的默认安装下,它无法正常工作:默认情况下,Vista不允许用户对Program Files目录下的任何内容进行写入访问,因此保存对应用程序配置文件的更改将抛出一个例外。

正确的答案是使用用户设置。这些文件存储在应用程序的用户设置文件中,该文件位于用户主目录的(深度嵌套的,与操作系统版本相关的)子目录中。 ConfigurationManager在运行时加载这些设置,并允许您更新并将它们保存在代码中。 Visual Studio中有一个完整的基础设施,可以让这个(相对)简单,这很好,因为正确的做法是针对ConfigurationManager类写入一段令人毛骨悚然的代码。以下是它的工作方式:

如果您查看VS项目的属性,您会看到一个名为Settings.settings的项目。当你双击它时,它会显示一个网格,让你添加设置到你的项目。您给出设置名称,选择其数据类型和默认值,最重要的是,范围。该设置可以是应用程序范围,在这种情况下,它的值对应用程序的所有用户都是公共的,并且存储在应用程序配置文件中。或者它可以是用户范围,在这种情况下,每个用户可以拥有自己的设置值,并且设置将存在于用户设置文件中。

将设置添加到此网格时,VS会生成代码以使设置可用于您的代码。基本上,它创建一个类,将这些设置作为单例对象的属性公开给您的代码。 (如果您想知道这样可以节省您不必做的事情,您可以看到此代码;它会存储在项目视图中的'Settings.settings'下创建的'Settings.Designer.cs'文件中。 )每次更改“设置”网格中的信息时,它也可以方便地重新生成此类。一旦你创建的设置网格的设置,你可以在你的代码中引用它正是如此:

ctl.BackColor = Properties.Settings.Default.BackColor; 

用户设置可以通过你的代码进行修改:

Properties.Settings.Default.BackColor = newBackColor; 

而且你可以将它们保存到用户设置文件是这样的:

Properties.Settings.Default.Save(); 

将这些设置公开为类的属性有很多原因是有用的。其中最重要的一点是,由于它们是属性(而不是像一个关键字所访问的字典条目,这是人们针对ConfigurationManager类编写的大多数代码的工作原理),因此您可以在编译时检查名称,重新使用代码。如果拼错了设置的名称,则在运行时不会得到NullReferenceException;当你编译它时,你会得到一个错误。

使用用户设置有一些微妙之处。其中一个不太明显的是:当你生成一个新版本的软件时会发生什么?用户设置存储在与程序版本号关联的目录中;如果您发布新版本,则其用户设置文件将不存在。在升级程序时,如何防止用户丢失所有设置?

这也是内置到那Settings类;所有你需要做的是这样的:

if (Properties.Settings.Default.UpgradeSettings) 
{ 
    Properties.Settings.Default.Upgrade(); 
    Properties.Settings.Default.UpgradeSettings = false; 
} 

这将从以前的版本复制用户的设置到设置文件的新版本。