Я знаю, что это может быть дубликатом, но я уже искал в Интернете и пробовал буквально ВСЕ и КАЖДОЕ найденное мной решение, но безрезультатно ...
У меня есть пользовательская форма в моем проекте под названием ParentForm
он является родителем большинства других моих форм в проекте, на нем есть некоторые стандартные элементы, такие как панели и таймеры.
У меня нет проблем с отображением этой формы, редактированием ее дизайна или кода.
но всякий раз, когда я открываю форму, которая унаследована от нее, она открывается на мгновение (не отвечая вам), а затем визуальная студия вылетает сразу, я думаю, что сначала это был только дизайнер, но сейчас, даже когда я откройте код формы, то же самое происходит!
Я настроил часть кода родительской формы, и теперь она перестала падать ... но теперь, когда я открываю дочернюю форму, я получаю это:
![enter image description here](https://i.stack.imgur.com/XQi3n.png)
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.