2009-11-27 4 views
6

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

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

ответ

4

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

+1

Я нашел, что this.CreateHandle(); работает очень хорошо (из формы) – NewfrontSolutions

0

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

19

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

+0

Ха, он работает. Хороший совет! –

+0

Спасибо! Это работает как charm :) – Mnyikka

2

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

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

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

+5

Убедитесь, что свойство видимости элемента управления установлено в true, или дескриптор не будет создан из вызова CreateControl(). Дополнительную информацию см. На странице http://msdn.microsoft.com/en-us/library/system.windows.forms.control.createhandle%28v=VS.90%29.aspx. – Drahakar

+0

@Drahakar Это очень хорошая нота: 'CreateControl' может выбрать не создавать элемент управления. Обходной путь, отмеченный в MSDN, - это доступ к свойству '.Handle' –

0

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

MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance); 
ch.Invoke(frm, new object[0]); 
Смежные вопросы