2011-08-05 5 views
0

私は、メニューバー、メニュー、およびmenuItem(BlaBlubと呼ばれる)を持つWinFormを持っています。
メニュー項目値が設定ファイルから正しく読み込まれ.NET WinForms PropertyBinding

設定SomeBool(bool型、スコープのユーザー、初期値= FALSE)にマッピングされCheckOnClick = True(ApplicationSettings)->(PropertyBindings)->Checkedを持っている(私もそれを確認するためにラベルを使用し、セッション間でファイルを変更するとメニュー項目が選択/選択解除されます)。しかし

、私は戻ってファイルに値を格納することができた

バックファイルに
private void Form1_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     Properties.Settings.Default.Save(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     label1.Text = string.Format("Value is: {0}", Properties.Settings.Default.SomeBool); 
    } 

を、私は、アプリケーションを開く]メニュー項目をクリックすると、変更した値を保存することができませんでした次のコードを使用して、次のコードを使用しますが、これは慣用的なアプローチではないようですので、私はまだこれを行う方法についていくつかの啓蒙を求めています。

private void blaBlubToolStripMenuItem_CheckedChanged(object sender, EventArgs e) 
    { 
     Properties.Settings.Default.SomeBool = blaBlubToolStripMenuItem.Checked; 
    } 

答えて

1

あなたが言った:

値が原因で負荷あなたに正しいではないでしょう提示したコードに基づいて、

しかし設定ファイルから正しく読み込まれチェックされた状態を設定していません。代わりに、私はあなたのテストが初期の永続化された設定値(falseである)を示していると思います。これは、メニュー項目のデフォルトのChecked状態です。

したがって、あなたはまた、追加することによって、あまりにもコントロールをintialize必要があります。

private void Form1_Load(object sender, EventArgs e) 
{ 
    label1.Text = string.Format("Value is: {0}", Properties.Settings.Default.SomeBool); 
    blaBlubToolStripMenuItem.Checked = Properties.Settings.Default.SomeBool; 
} 

注:通常、私がデータバインディングを使用するためにあなたを言うだろうが、あなたは私がのMenuItemのがこれをサポートしていないと信じてすることはできませんので。

+0

Hmm。それでは、アプリケーションに冗長なコードをたくさん追加しなくても、どうすればこの問題に取り組むことができますか? – yas4891

+0

私はmenuitemの "バインディング"には、組み込みのフレームワークはないのではないかと恐れています。したがって、バインドされたプロパティ値が変更されたときに、手動でコントロールの状態を構成し、それを管理する必要があります。 – Reddog

+0

それは残念です。 WPFでこれを行う方法はありますか? – yas4891

関連する問題