2009-07-12 68 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; 
} 

這將從以前的版本複製用戶的設置到設置文件的新版本。