Столкнулся с циклом в if!

Программирую обычный кликер на WinForms. Проблема обширная!

Хотел сделать два режима Advanced/Default и сохранять их. Создал и сохранял в параметрах переменные.

введите сюда описание изображения

В "Mode" я мог бы присвоить тип bool, если у меня только два режима, но это сути дела не меняет! (поменяю потом)

У меня метод, который вызывает новую форму, так называемую "FormAdvanced" и скрывает прошлую форму.

 void formAdvancedOpen()
        {
            if (Properties.Settings.Default.Mode == "Advanced") 
            {
                FormAdvanced formAdvanced = new FormAdvanced();
                if (formAdvanced != null)
                {
                    timer.Stop();
                    Hide();
                    formAdvanced.Show();
                }
            }
        }

Проблема такая, что после проверки условия if (Properties.Settings.Default.Mode == "Advanced") компилятор переходит на другую строчку, где создаётся форма и она возвращается снова к проверке условия, как будто, тут цикл For или While.

Тут тяжело понять, тут надо видеть!

введите сюда описание изображения

Как видно дальше этого места код никуда не идёт.

Если с заходом дебажить, то сперва обращается к private System.ComponentModel.IContainer components = null; в FormAdvanced.Designer.cs введите сюда описание изображения

Потом переходит в код формы FormAdvanced

введите сюда описание изображения

До инициализации не доходит. И на повторный круг.

Из-за этого цикла, он создаёт кучу экземпляров формы, которых не видно! Я это понял благодаря трею (notifyicons). Вот скрин:

введите сюда описание изображения

Часть кода:

Главная форма | Default

namespace Clicker
{
    public partial class MainForm : Form
    {

        [DllImport("user32.dll")]
        static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, int dwExtraInfo);
        

        public MainForm()
        {
            TopMost = true;

            InitializeComponent();
            formAdvancedOpen();


          ... ... ... ... ... ...

Форма Advanced

namespace Clicker
{
    public partial class FormAdvanced : Clicker.MainForm
    {
        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool SetCursorPos(int X, int Y);
        private IKeyboardMouseEvents m_Events;



        public FormAdvanced()
        {
            InitializeComponent();
        }

         ... ... ... ... ... ...

Как видно ничего криминального! Не знаю, что делать! Возможно ли мне тут помочь?!

Если убрать вызов метода в начале главный формы, то всё почти отлично! Могу вызвать его без этого бреда выше, только внутри чего-то.

 advancedToolStripMenuItem.Click += (s, a) => {
                Properties.Settings.Default.Mode = "Advanced";
                Properties.Settings.Default.Save();

                formAdvancedOpen();
            };

Тут работает всё адекватно!

введите сюда описание изображения

Могу выложить в GitHub и указать ссылку, если кому интересно! Хотелось бы решить проблему конечно!

Заранее всем спасибо за помощь!


Ответы (1 шт):

Автор решения: MilkRen

Моя ошибка. Я унаследовал одну форму к другой class FormAdvanced : Clicker.MainForm Вот и получается для создания FormAdvanced инициализируется MainForm, которая в своем конструкторе создает новый FormAdvanced, а тот опять MainForm, и так по кругу!

Большое спасибо, EvgeniyZ!

→ Ссылка