Принудительно создать дескриптор для управления - PullRequest
9 голосов
/ 27 ноября 2009

В настоящее время я создаю модуль тихой печати. Текущий элемент управления, который я использую: он проверяет, что дескриптор элемента управления уже создан (IsHandleCreated). Я сделал все, чтобы обмануть это без всякой удачи.

Есть ли у вас идеи о том, как создать дескриптор для элемента управления, не отображая его на экране?

Ответы [ 5 ]

21 голосов
/ 20 июля 2010

Вам необходимо получить доступ к свойству Handle (поместить результат в фиктивную переменную или что-то в этом роде). Посмотри в отражатель; это заставляет ручку создавать.

5 голосов
/ 27 ноября 2009

Попробуйте перегрузить CreateParams свойство getter. В нем снимите флажок WS_VISIBLE.

2 голосов
/ 20 июля 2010

У меня была такая же проблема с некоторыми другими элементами управления и я использовал метод Control.CreateControl():

private void CheckForExistingHandle(Control control)
{
    if (!control.IsHandleCreated)
        control.CreateControl();
}

Но я не знаю, как это работает с модулем печати. ​​

0 голосов
/ 07 августа 2015

Вызов частного метода CreateHandle сделает всю работу.

MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance);
ch.Invoke(frm, new object[0]);
0 голосов
/ 20 июля 2010

Я решил эту досадную проблему создания дескриптора, установив WS_VISIBLE в CreationParams. Вы можете либо переопределить свойство CreationParams элемента Control, либо вызвать метод CreateHandle с соответствующим экземпляром CreateParams. Смотрите ссылку

...