(Visual Studio 2019 Community) Ошибка при создании дескриптора окна, когда я хочу открыть конструктор - PullRequest
0 голосов
/ 11 марта 2020

Я использую Visual Studio 2019 Community Edition, и моя программа - большое приложение winform. Когда я пытаюсь открыть winforms, чтобы отредактировать их, я всегда получаю сообщение об ошибке:

Error creating window handle.

bei System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
bei System.Windows.Forms.Control.CreateHandle()
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.ControlCollection.Add(Control value)
bei System.Windows.Forms.Form.ControlCollection.Add(Control value)
bei System.Windows.Forms.Design.ControlDesigner.DesignerControlCollection.Add(Control c)  

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

Редактировать: я могу создать и запустить приложение без ошибок, но не работает только дизайнер в Visual Studio.

Редактировать2: я могу открыть все windows, в которых нет панели, если они есть, я получаю ошибку.

Edit3: Иногда разработчик пишет, что все элементы управления и переменные не были объявлены или не были назначены.

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Я нашел сейчас ошибку. У меня был код, который предотвращает мерцание. Этот код был выполнен до того, как был создан дескриптор окна, и именно поэтому эта ошибка вызвала.

0 голосов
/ 12 марта 2020

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

this.Load += delegate {
    if(!THISISLOADED) return; //Exits -> will always be false in Design Time  
    OnLoad();
};

private void OnLoad()
{
   //place all run time code here - will not execute at design time 
   //...
   THISISLOADED = true; //just in case 
}


private bool m_THISISLOADED = false; //false at design time
public bool THISISLOADED {
    get { return m_THISISLOADED; }
    set {
        m_THISISLOADED = value;
    }
}

Затем, перед отображением формы, установите для булевого свойства THISISLOADED значение true ...

myWinForm.THISISLOADED = true;
myWinForm.ShowDialog();

РЕДАКТИРОВАТЬ: только что нашел это Обнаружение режима разработки из конструктора элемента управления

Вы можете проверить режим разработки, используя LicenseManager ...

this.Load += delegate {
    if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) return;
    OnLoad();
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...