Принудительно создайте дескриптор для управления

StackOverflow https://stackoverflow.com/questions/1807921

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance);
ch.Invoke(frm, new object[0]);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top