Принудительно создайте дескриптор для управления
Вопрос
В настоящее время я создаю модуль автоматической печати.Текущий элемент управления, который я использую, заключается в том, что он проверяет, что дескриптор управления уже создан (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]);