C # set get не работает при первом нажатии с помощью форм

#c# #forms #get #set

#c# #формы #получить #установить

Вопрос:

Я создаю простую программу текстового редактора. Когда текст отредактирован, появляется окно с вопросом, хотите ли вы сохранить файл. Это было реализовано с использованием форм и логических значений, сохраненных во всплывающем окне. Если я нажму да, нет или отмену в первый раз, установщики не будут работать. Но если я нажму второй, установщики будут работать отлично. Почему это не работает с первого раза? Код для всплывающего окна.

 public bool Exit { set; get; }
public bool Save { set; get; }
public bool _Open { set; get; }
  
 case ("Yes"):
{
    if (form1.Operation() == "Exit")
    {
        Exit = true; //Bool that tells the program to exit.
        MessageBox.Show(Exit.ToString()); //This prints the correct value
    }
    Save = true; //Bool that states if file should be saved.
    return;
}
  

Код для основного окна редактирования текста. Пример с пользователем, нажавшим кнопку выхода.

 public partial class Form1 : Form
{
    Form3 form3 = new Form3(); //the popup class.
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (e.CloseReason == CloseReason.UserClosing)
        {
            if (_edited)
            {
                _operation = "Exit";
                form3.ShowDialog();

                MessageBox.Show(form3.Exit.ToString()); //Always false on first entry?
                if (form3.Exit)
                {
                    if (form3.Save)
                    {
                        Save();
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }
    }
}
  

Ответ №1:

В вашем вопросе вы говорите «да, нет или отмена», но во втором блоке кода, похоже, он установлен только Exit = true для случая «Да». Может ли это быть проблемой?

Вы могли бы попробовать установить точки останова и отладить код, чтобы иметь возможность понять, что происходит. Если вы удалите автоматические свойства и добавите резервное поле вручную, вы также можете установить точки останова, чтобы видеть, когда вызываются установщики. Вы могли бы написать свой выход следующим образом:

 private bool _exit;
public bool Exit
{
    get => _exit;
    set
    {
        _exit = value;
    }
}
  

Это позволит вам установить точку останова и точно увидеть, когда вызывается установщик.
Если вам нужна помощь в отладке, пожалуйста, предоставьте некоторую информацию о том, какой редактор кода вы используете.