Нужен IntPtr для формы (VB.Net)

Мне нужен intPtr для формы. Control.FromHandle(control) дает мне управление из дескриптора, но мне нужно обратное — получить дескриптор из элемента управления. Как мне это сделать?


person Jeff    schedule 08.05.2009    source источник


Ответы (2)


Пытаться

Dim handle As IntPtr = someControl.Handle

Примечание. Это будет работать только после создания дескриптора элемента управления. Существует промежуток времени между созданием элемента управления и его визуализацией до некоторой степени, когда это может возвращать IntPtr.Zero

person JaredPar    schedule 08.05.2009

Примечание. Это будет работать только после создания дескриптора элемента управления. Существует промежуток времени между созданием элемента управления и его визуализацией до некоторой степени, когда это может вернуть IntPtr.Zero.

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

person Thomas Levesque    schedule 08.05.2009
comment
Проверьте метод в отражателе. Бывают случаи, когда он просто не создаст дескриптор. Это не гарантируется, но может произойти при определенной конфигурации. - person JaredPar; 08.05.2009
comment
Должен признаться, я не анализировал код метода CreateHandle... теперь, когда я это сделал, я нахожу его немного запутанным и не уверен, что он всегда создает дескриптор. Так что, возможно, вы правы в конце концов ;) - person Thomas Levesque; 08.05.2009
comment
@Thomas, есть крайний случай, когда базовое состояние предотвращает создание дескриптора. Я знаю, что он существует, только потому, что я нажимал его раньше, потому что я предполагал, что Handle будет действительным до того, как будет удален. Прошло ~ 2 года, поэтому я не могу вспомнить подробности (только боль :)). - person JaredPar; 08.05.2009