Chvalov
@Chvalov

Проект на C# WinForm не завершается полностью после перехода между формами, как решить?

Суть вопроса понятна из заголовка
Есть код (Первая форма)
namespace coinBOT
{
    public partial class BotForm : Form
    {
        public BotForm()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SettingsForm открываем_форму_с_настройками = new SettingsForm();
            открываем_форму_с_настройками.Show();   // Показываем форму с настройками
            this.Hide();                            //Скрываем данную форму
        }
    }
}
Форма 2
namespace coinBOT
{
    public partial class SettingsForm : Form
    {
        public SettingsForm()
        {
            InitializeComponent();
        }

        private void SettingsForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.UserClosing)
            {
                e.Cancel = true;
                Hide();
                BotForm возврат_главной_формы = new BotForm();
                возврат_главной_формы.Show();
            }
        }
    }
}

Если на второй форме убрать Hide(); то можна увидеть что форма постоянно работает.
Как мне при закрытии программы с первой формы убить вторую форму для полного закрытия программы ?
  • Вопрос задан
  • 3713 просмотров
Решения вопроса 1
@dmmu
Думаю, Вам больше подойдет что-то такое:

namespace coinBOT
{
    public partial class BotForm : Form
    {
        private SettingsForm _settingsForm;

        public BotForm()
        {
            InitializeComponent();

            this._settingsForm = new SettingsForm() { Owner = this };
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (this._settingsForm.ShowDialog() == DialogResult.OK)
            {
                  // обработка результатов
            }
        }
    }
}


Из второй формы убирайте обработчик FormClosing, он там не нужен. Форма настроек будет убиваться автоматически при закрытии приложения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Sumor
Чувствую, что вам следует прочитать про ShowDialog.
Если вы открываете форму с помощью ShowDialog, то вторая форма открывается в модальном режиме, а первая будет ожидать кода возврата от второй формы.
Ответ написан
Комментировать
cjey
@cjey
Обращаю ваше внимание, что при закрытии второй формы вы не показываете уже существующую первую форму, а создаете еще одну первую форму, а еще одна первая форма остается висеть в фоне.

Возвращаясь к исходному вопросу: вам нужно хранить все созданные вами формы, и при выходе явно их закрывать.

Например можно модифицировать Program.cs, создать две статические переменные для первой и второй формы. И уже через эти переменные явно их прятать, показывать и закрывать.
Ответ написан
Комментировать
@zeronice
VoIP, .NET, интернет
Environment.Exit(0);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы