2011-08-05 27 views
0

我有一個菜單欄,一個菜單和一個menuItem(稱爲BlaBlub)的WinForm。
菜單項已經CheckOnClick = True(ApplicationSettings)->(PropertyBindings)->Checked映射到設置SomeBool(bool類型,範圍用戶,初始值=假).NET WinForms PropertyBinding

值正確地從設置文件讀(ⅰ使用標籤來檢查它,也當我在會話之間對文件進行更改時,菜單項被選中/取消選擇)。

但是,使用下面的代碼我無法打開應用程序,點擊菜單項,然後將改變後的值迴文件

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)也是菜單項的默認選中狀態。

因此,你也應該加入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; 
} 

注:通常我會告訴你使用數據綁定,但你不能因爲我相信菜單項的不支持此。

+0

嗯。那麼如何避免在我的應用程序中增加大量冗餘代碼? – yas4891

+0

恐怕說到「綁定」menuitem的沒有內置框架。所以你必須手動配置控制狀態並在綁定屬性值改變時管理它的更新。 – Reddog

+0

這很不幸。有沒有辦法在WPF中做到這一點? – yas4891