Boolean disetel ke true ketika program dimulai tanpa saya suruh

Benar, jadi saya ingin menambahkan fitur simpan pengaturan ke program saya. Saya akan menjalani semua langkah dari seluruh proses penyimpanan/pemuatan yang telah saya siapkan saat ini. Jadi logisnya, simpan semua pengaturan tergantung pada bool saveStateToggle saat keluar dari program:

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

saveSettings hanyalah ini:

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();
        }

Kemudian, saat program diluncurkan, di private void Form1_Load bergantung pada pengaturan yang disimpan sebelumnya:

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

loadSettings(); sama dengan saveSettings(); tetapi dicerminkan. Jadi jika saveSettings(); adalah Properties.Settings.Default.saveStateToggle = saveStateToggle;, loadSettings() akan menjadi seperti ini: saveStateToggle = Properties.Settings.Default.saveStateToggle;

Setelah debugging lebih lanjut, saya menemukan bahwa saveStateToggle memang false sebelum Application.Exit();, tetapi secara misterius berubah menjadi true bahkan sebelum saya memanggil loadSettings(); di private void Form1_Load ketika saya memulai program lagi.

Saya benar-benar bingung. Saya sudah memeriksa semuanya dan bagi saya, semuanya tampak logis. Mungkinkah saveStateToggle menjadi kenyataan karena saya dalam konfigurasi Debug saat menjalankan program? Apakah mungkin untuk memiliki tombol yang dapat diubah untuk mengaktifkan penyimpanan?

Tombol yang mengubah saveStateToggle benar atau salah:

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

Boolean didefinisikan di sini:

        bool saveStateToggle = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)

person Frappy    schedule 20.11.2020    source sumber
comment
Apa yang ada di file pengaturan sebelum diluncurkan kembali?   -  person Adam    schedule 20.11.2020
comment
Harap tinjau pedoman contoh minimal yang dapat direproduksi tentang kode postingan. Yaitu. bool saveStateToggle = true; definisi properti tidak ditampilkan sehingga sulit memberikan jawaban.   -  person Alexei Levenkov    schedule 20.11.2020
comment
@Adam harus semuanya dari terakhir kali program disimpan ke file pengaturan KECUALI saveToggleState yang seharusnya salah.   -  person Frappy    schedule 20.11.2020
comment
@AlexeiLevenkov Maaf, saya rasa saya harus memasukkannya. Bagaimanapun, boolean didefinisikan di atas public Form1(){InitializeComponent();} yang berada di atas Form1_Load   -  person Frappy    schedule 20.11.2020
comment
Sudahkah Anda mencoba menyetel breakpoint pada semua baris yang mengubah saveToggleState (seharusnya tidak terlalu banyak)? Apakah mungkin ada serangkaian peristiwa yang secara tidak sengaja memicu peristiwa klik tombol untuk tombol SaveState, misalnya selama Form_Load? saveToggleState tidak bisa menjadi kenyataan secara misterius; sesuatu akan mengaturnya menjadi seperti itu.   -  person Sean Skelly    schedule 20.11.2020
comment
@SeanSkelly Saya membuat MessageBox menunjukkan status boolean setiap kali setelah diubah. Saya tidak tahu apa yang membuatnya menjadi kenyataan. Kotak Pesan terakhir tepat sebelum Application.Exit(); menunjukkan kepada saya bahwa itu memang false. Namun terkadang ada baiknya untuk berpikir dari sudut pandang pengguna dan bukan melakukan rekayasa berlebihan. Saya menyadari bahwa hampir tidak ada orang yang akan menggunakannya.   -  person Frappy    schedule 20.11.2020
comment
Mengapa tidak menggunakan debugger untuk menelusuri kode? Kemudian Anda dapat melihat keadaan anggota kelas selama eksekusi program.   -  person Rufus L    schedule 20.11.2020
comment
Bug yang paling jelas dalam kode ini adalah bool disimpan dan dimuat dari pengaturan, tetapi memuatnya tidak memperbarui teks tombol. Jadi Anda mungkin mengira itu belum diatur, tetapi sebenarnya memang demikian.   -  person Hans Passant    schedule 20.11.2020
comment
@HansPassant Saya telah menyederhanakan kode untuk posting ini. Ada juga setValues(); yang memperbarui semua tombol dan apa yang tidak sesuai dengan boolean.   -  person Frappy    schedule 22.11.2020


Jawaban (1)


Menurut saya loadsettings mengubah nilainya. ubah saveStateToggle menjadi properti dan letakkan breakpoint pada penyetel untuk melihat tumpukan panggilan dan dari mana panggilan tersebut dipanggil.

private bool _saveStateToggle = false;
public bool SaveStateToggle
{
    get  { return _saveStateToggle;}
    set{ _saveStateToggle = value }
}
person Roussul    schedule 21.11.2020