Обнаружение свойств по умолчанию для элемента управления ActiveX
Вопрос
Можно ли определить, какое свойство элемента управления ActiveX является свойством по умолчанию? Например, что является свойством по умолчанию элемента управления CommandButton VB6 и как бы я узнал о других элементах управления по умолчанию!
/ EDIT: без источника для самого объекта
Решение 3
Используйте OLE / Com Object Viewer, который распространяется с Microsoft Visual Studio. Р>
Перейдите в библиотеки типов и найдите библиотеку, в которой находится элемент управления, например, CommandButton хранится в Microsoft Forms 2.0 Object Library . Щелкните правой кнопкой мыши библиотеку и выберите вид. Найдите кокласс, представляющий элемент управления, и выберите его:
Как видно, интерфейс по умолчанию для CommandButton - это ICommandButton, когда вы проверяете, что ICommandButton ищет свойство со значением dispid, равным 0. IDL для свойства dispid 0 в CommandButton:
[id(00000000), propput, bindable, displaybind, hidden, helpcontext(0x001e8d04)]
void Value([in] VARIANT_BOOL rhs);
[id(00000000), propget, bindable, displaybind, hidden, helpcontext(0x001e8d04)]
VARIANT_BOOL Value();
Показывает вам свойство по умолчанию.
Другие советы
Я не использую VB, но здесь все идет.
Я обнаружил, что использует значение элемента управления , но это не программное решение. Если у вас есть доступ к коду, поищите
Attribute Value.VB_UserMemId = 0
с помощью Блокнота.
Это зависит от того, когда вы хотите это определить. Вы можете напечатать " значение " скажем, элемента управления меткой (у которого нет свойства "value") для отладчика, например:
debug.print "Value for cmdTest is ["+format(cmdTest)+"]"
Что даст вам что-то вроде:
Значение для cmdTest равно [False]
Как оказалось, значением по умолчанию для командной кнопки является ее состояние (нажата или нет), поэтому, если вы поместите приведенный выше пример кода в событие click для элемента управления, вы увидите " True " ;, если вы запустите его где-нибудь еще, и вы увидите " False ".
Для других результатов этот метод, по крайней мере, покажет вам тип свойства, которое вы ищете. Вы можете использовать:
debug.print "cmdTest's value is of type ["+TypeName(oObject) +"]"
которые сообщают вам фактический тип, а именно:
Значение cmdTest имеет тип [Boolean]
Вы можете использовать различные методы для сужения, например, установить значение и посмотреть, что произойдет.
у вас есть доступ к коду, ищите
К сожалению, у меня нет доступа к коду для большинства элементов управления. Однако эта ссылка полезна для элементов управления Microsoft, но я все же хотел бы узнать о других элементах управления.