Visual Studio аварийно завершает работу при открытии форм, наследуемых от указанной c формы в проекте - PullRequest
0 голосов
/ 17 апреля 2020

Я знаю, что это может быть дубликатом, но я уже искал в Интернете и пробовал буквально ВСЕ и КАЖДОЕ найденное мной решение, но безрезультатно ...

У меня есть пользовательская форма в моем проекте под названием ParentForm он является родителем большинства других моих форм в проекте, на нем есть некоторые стандартные элементы, такие как панели и таймеры.

У меня нет проблем с отображением этой формы, редактированием ее дизайна или кода.

но всякий раз, когда я открываю форму, которая унаследована от нее, она открывается на мгновение (не отвечая вам), а затем визуальная студия вылетает сразу, я думаю, что сначала это был только дизайнер, но сейчас, даже когда я откройте код формы, то же самое происходит!

Я настроил часть кода родительской формы, и теперь она перестала падать ... но теперь, когда я открываю дочернюю форму, я получаю это:

enter image description here

ContaierPanel и panel2 - это две панели, которые есть у меня в родительской форме, и, поскольку я не вижу проблем с ними, они используются в качестве контейнеров в детские формы, их доступ мо различия также публикуются c.

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

Я также загрузил весь проект на Github на случай, если кто-то захочет увидеть код, вот ссылка .

Я использую Material Skin в проекте.

Ваша помощь очень ценится, у меня не так много времени до истечения срока, и еще многое предстоит сделать ... Спасибо


Редактировать: После нескольких часов отсутствия кода, я наконец-то обнаружил часть кода, которая вызывает проблему: Как я уже говорил, у меня есть таймер в родительской форме. Вызывается tmrCheckConnection, вот код таймера:

private void tmrCheckConnection_Tick(object sender, EventArgs e)
    {
        if (!Program.dbConnection.IsConnect())
        {
            if (!controlsAreDisabled)
            {
                disabledControls.Clear();

                foreach (Control c in this.Controls)
                {
                    if (c.Enabled)
                    {
                        disabledControls.Add(c);
                        c.Enabled = false;
                    }
                }
                controlsAreDisabled = true;
            }

            lblNoDBConnection.Enabled = true;
            lblNoDBConnection.Visible = true;
            this.Controls.SetChildIndex(lblNoDBConnection, 0);
        } else {
            if (controlsAreDisabled)
            {
                foreach (Control c in disabledControls)
                    c.Enabled = true;

                lblNoDBConnection.Visible = false;
            }
        }
    }

Очевидно, что здесь происходит ошибка >> Program.dbConnection.IsConnect () <<, потому что это еще не экземпляр класса, а <code>IsConnect() функций использует некоторые из своих члены.

Таким образом, решение состоит в том, чтобы просто запретить выполнение кода таймера во время разработки, поэтому я попытался поместить это:

if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)
return;

в начале кода таймера, это не ничего не изменить.

Далее я попытался удалить обработчик событий из таймера и переназначить его в Form_Load следующим образом:

if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Runtime)
            tmrCheckConnection.Tick += tmrCheckConnection_Tick;

И снова, это не помогло.

Есть идеи?

О, и я удалил хранилище github.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...