2014-09-03 84 views
1

保存一个系统属性一直在寻找,并不能真正找到任何将完全关联我在这里要做的事情。我在WPF应用程序中创建了一个名为'firstrun'的系统属性,它是一个bool。尝试让程序读取它是否为真,然后在第一次运行程序时采取不同的行为。但是一旦关闭,就会将其设置为假。我的代码是这样的,每次我运行程序时,它仍然如此:在程序退出

public partial class MainWindow : Window 
{ 

    bool firstRun = Properties.Settings.Default.FirstRun; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     if (firstRun) 
     { 
      MessageBox.Show("First run"); 
     } 
     else 
     { 
      // Run rest of program 
      MessageBox.Show("This is not the first run"); 
     } 
    } 

    private void windowClosing(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     this.firstRun = false; 
     Settings.Default.Save(); 
    } 


} 
} 
+0

如何引用'windowClosing'?你确定你注册了事件处理程序吗? – 2014-09-03 12:44:16

+1

您在MainWindow成员中更改值(bool firstRun)。您需要在设置(Properties.Settings.Default.FirstRun)中更改属性值,然后调用Settings.Default.Save(); ... – Davecz 2014-09-03 12:45:54

+0

http://cl.ly/image/151Q0O2H3R1l/Screen%20Shot%202014-09-03%20at%2001.47.52%20LATE.png – 2014-09-03 12:48:35

回答

3

你在主窗口成员更改值:

bool firstRun = Properties.Settings.Default.FirstRun; 

您需要更改设置(Properties.Settings属性值。 Default.FirstRun),然后调用Settings.Default.Save()这样的:

private void windowClosing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    Properties.Settings.Default.FirstRun = false; 
    Settings.Default.Save(); 
} 

对于此功能,您必须在设置更改范围的文件从申请到用户的价值。在用户范围内属性有getter和setter

+0

简单的信息是:不要为这样的事物分配变量以防止弄乱事情。 – 2014-09-03 12:50:57

+0

'Properties.Settings.Default.FirstRun = false;'是只读的? – 2014-09-03 12:51:58

+0

在您的设置文件中,您必须将范围从应用程序更改为用户,然后属性不是只读:-) – Davecz 2014-09-03 12:54:15