2009-07-12 6 views
0

私はWindowsアプリケーションを開発しています。バックカラープロパティの変更を保持する

私は3つの形式があります。

私は、ユーザーが選択した色に、すべての3つのフォームの背景色を変更したいが。

私はバックカラーを変更できますが、アプリケーションを終了して再起動すると、ユーザーが設定した色を取得できません。私はデフォルトの色のみを取得しています。

ユーザーが選択した色を保持し、ユーザーがアプリケーションを再起動したときにそれを背景色として使用することは可能ですか?

形態で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た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; 
    } 

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; 

    } 

色のダイアログボックスで色を選択して[OK]ボタンを押すと色も変わりますが、アプリケーションを再起動すると、色のダイアログを使用して設定した色が表示されません。この設定を保持して、アプリケーションが実行されるたびにそれをリセットすることなく、所望の色を得ることができる。

上記のコードではエラーは発生しません。

このタスクの実行に誰か助けてくれますか?

ありがとうございます!

答えて

-1

あなたはそれを間違ってやっています。

ユーザーはバックカラーのユーザー選択をどのように覚えていますか?
アプリはメモリ内で実行されます。&は、選択されたバックカラーが終了するまで表示されます。

続きを読むthis &を先に読んでください。

EDIT:また、Form1.BackColorをForm2で使用するのは正しいことではありません。
Form1を開き、背景色を変更し、Form1を閉じます。& Form2を開いて、何が起こるかを確認します(Form1が再び開くことがあります)。

+1

アプリケーション設定のスキーマは、非常に最後の場所ではありません。ユーザー設定のアイデアを初めて知った開発者が探しているはずですが、近いです。 –

+0

私は設定ファイルについて多くの知識を持っていません。他の方法はありますか? – Sheetal

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

+0

完全に正直であると私はMSDNで見つけました! –

0

なぜあなたはすべての3つのフォームがに耳を傾けるというイベントを作成してはいけないし、 「色の変更」イベントを聞いているときに背景色を変更するようにしますか?また、フォームが読み込まれると背景色を変数に格納された値に設定できるように、静的変数に色を格納することもできます。

画面に色の設定を記憶させるには、選択した色をユーザー設定ファイルに保存してください。環境設定ファイルを保存するために "IsolatedStorage"機能を試してください。

+0

ここに、隔離されたストレージにユーザーの好みを保存するための良い記事へのリンクがあります。http://www.codeguru.com/csharp/csharp/cs_data/article.php/c4225 – Madeleine

+0

その記事は、少なくとも古いものです。 –

1

アプリケーション構成ファイルの使用に関する提案は近いですが、2つの問題があります。

まず、アプリケーションのすべてのユーザーが同じアプリケーション構成ファイルを共有します。複数のユーザー(ネットワーク上、言い換えれば同じマシン上の異なるユーザー)がいる場合、ユーザーの設定をアプリケーション構成ファイルに保存すると、すべてのユーザーの設定が変更されます。もう1つの問題は、Vistaのデフォルトインストールでは動作しません:デフォルトでは、VistaはユーザにProgram Filesディレクトリの下にあるものへの書き込みアクセス権を与えないため、アプリケーション設定ファイルへの変更を保存するとスローされます例外。

正しい答えは、ユーザー設定を使用することです。これらは、アプリケーションのユーザー設定ファイルに格納されます。ユーザー設定ファイルは、ユーザーのホームディレクトリの(深くネストされた、OSバージョンに依存する)サブディレクトリに存在します。 ConfigurationManagerはこれらの設定を実行時にロードし、コード内で更新して保存することができます。 Visual Studioにはインフラストラクチャ全体が組み込まれており、比較的簡単に行うことができます。これは、適切に行うには、ConfigurationManagerクラスに対して膨大な量のコードを書く必要があるためです。これはどのように動作するのですか:

VSプロジェクトのプロパティを見ると、Settings.settingsという項目が表示されます。これをダブルクリックすると、プロジェクトに設定を追加できるグリッドが表示されます。設定名を与え、そのデータ型とデフォルト値を選択し、重要なのはスコープです。この設定はアプリケーションスコープにすることができます。この場合、その値はアプリケーションのすべてのユーザーに共通であり、アプリケーション構成ファイルに格納されます。または、ユーザースコープにすることもできます。その場合、各ユーザーはそれぞれの設定値を持つことができ、設定はユーザー設定ファイルに保存されます。

このグリッドに設定を追加すると、VSはコードで設定を使用できるようにコードを生成します。基本的には、これらの設定をシングルトンオブジェクトのプロパティとしてコードに公開するクラスを作成します。 (このコードは、これがあなた自身をやらなければならないことをどのようにしているのかを知りたい場合は、プロジェクトビューの[Settings.settings]の下に作成された 'Settings.Designer.cs'ファイルに格納されます。 )また、便利には、設定グリッドの情報を変更するたびにこのクラスを再生成します。

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

ユーザー設定は、コードによって変更することができます:あなたが設定グリッドの設定を作成したら、thuslyあなたのコードでそれを参照することができ

Properties.Settings.Default.BackColor = newBackColor; 

そして、あなたは、ユーザーにそれらを保存することができます

Properties.Settings.Default.Save(); 

これらの設定をクラスのプロパティとして公開することは、多くの理由で役立ちます。最も重要なのは、キーでアクセスされる辞書のエントリではなく、プロパティであるため、ユーザがConfigurationManagerクラスに対して書いているほとんどのコードがどのように動作するかは、コンパイル時に、コード内で使用します。設定の名前を間違えた場合は、実行時にNullReferenceExceptionを取得することはありません。代わりにコンパイルするとエラーが発生します。

ユーザー設定の使用にはいくつかの微妙な点があります。それほど明白なものの1つは、ソフトウェアの新しいリリースを作成するとどうなりますか?ユーザー設定は、プログラムのバージョン番号をキーとするディレクトリに保存されます。新しいバージョンをリリースすると、そのバージョンのユーザー設定ファイルは存在しません。ユーザーがプログラムをアップグレードするときに、ユーザーが設定をすべて失うことを防ぐにはどうすればよいですか?

これは、Settingsクラスにも組み込まれています。

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

これは、以前のリリースのユーザー設定を新しいリリースの設定ファイルにコピーします。

関連する問題