Мне нужен intPtr для формы. Control.FromHandle(control) дает мне управление из дескриптора, но мне нужно обратное — получить дескриптор из элемента управления. Как мне это сделать?
Нужен IntPtr для формы (VB.Net)
Ответы (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
Проверьте метод в отражателе. Бывают случаи, когда он просто не создаст дескриптор. Это не гарантируется, но может произойти при определенной конфигурации.
- person JaredPar; 08.05.2009
Должен признаться, я не анализировал код метода CreateHandle... теперь, когда я это сделал, я нахожу его немного запутанным и не уверен, что он всегда создает дескриптор. Так что, возможно, вы правы в конце концов ;)
- person Thomas Levesque; 08.05.2009
@Thomas, есть крайний случай, когда базовое состояние предотвращает создание дескриптора. Я знаю, что он существует, только потому, что я нажимал его раньше, потому что я предполагал, что Handle будет действительным до того, как будет удален. Прошло ~ 2 года, поэтому я не могу вспомнить подробности (только боль :)).
- person JaredPar; 08.05.2009