首页 > 解决方案 > 程序启动时布尔值设置为真,而我没有告诉它

问题描述

对,所以我想在我的程序中添加“保存设置”功能。我将完成我现在设置的整个保存/加载过程的所有步骤。因此,从逻辑上讲,根据bool saveStateToggle退出程序的时间保存所有设置:

private void exitBtn_Click(object sender, EventArgs e)
        {
            if(saveStateToggle == false)
            {
                Application.Exit();
            }
            else
            {
                saveSettings();
                Application.Exit();
                
            }
        }

saveSettings 就是这样:

private void saveSettings()
        {
            Properties.Settings.Default.onTopToggle = onTopToggle;
            Properties.Settings.Default.saveStateToggle = saveStateToggle;
            Properties.Settings.Default.debugToggle = debugToggle;
            Properties.Settings.Default.min = minTrackbar.Value;
            Properties.Settings.Default.max = maxTrackbar.Value;
            Properties.Settings.Default.Save();
        }

然后,当程序启动时,private void Form1_Load根据之前保存的设置:

private void Form1_Load(object sender, EventArgs e)
        {
            if(Properties.Settings.Default.saveStateToggle == true)
            {
                loadSettings();
            }
            else
            {
                loadDefaultSettings();
            }
        }

loadSettings();saveSettings();与镜像相同。所以如果saveSettings();Properties.Settings.Default.saveStateToggle = saveStateToggle;loadSettings()就会有这样的:saveStateToggle = Properties.Settings.Default.saveStateToggle;

经过进一步调试,我发现saveStateToggle确实是falsebefore Application.Exit();,但是当我再次启动程序时,它甚至在true我调用之前就神秘地转动了。loadSettings();private void Form1_Load

我完全不知所措。我检查了一切,对我来说,一切似乎都是合乎逻辑的。可能saveStateToggle因为我在运行程序时处于“调试”配置中而变成真的?甚至可以有一个可切换的按钮来启用保存吗?

切换saveStateToggle真假的按钮:

private void SaveStateToggleBtn_Click(object sender, EventArgs e)
        {
            if (saveStateToggle == false)
            {
                saveStateToggle = true;
                SaveStateToggleBtn.Text = "SAVESTATE: ON";
            }
            else
            {
                saveStateToggle = false;
                SaveStateToggleBtn.Text = "SAVESTATE: OFF";
            }
        }

布尔值在这里定义:

        bool saveStateToggle = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)

标签: c#winformsapplication-settings

解决方案


我认为loadsettings正在改变价值。将saveStateToggle更改为一个属性并在设置器上放置一个断点以查看调用堆栈以及调用它的位置。

private bool _saveStateToggle = false;
public bool SaveStateToggle
{
    get  { return _saveStateToggle;}
    set{ _saveStateToggle = value }
}

推荐阅读