Обнаружение свойств по умолчанию для элемента управления ActiveX

StackOverflow https://stackoverflow.com/questions/41492

  •  09-06-2019
  •  | 
  •  

Вопрос

Можно ли определить, какое свойство элемента управления ActiveX является свойством по умолчанию? Например, что является свойством по умолчанию элемента управления CommandButton VB6 и как бы я узнал о других элементах управления по умолчанию!

/ EDIT: без источника для самого объекта

Это было полезно?

Решение 3

Используйте OLE / Com Object Viewer, который распространяется с Microsoft Visual Studio.

Перейдите в библиотеки типов и найдите библиотеку, в которой находится элемент управления, например, CommandButton хранится в Microsoft Forms 2.0 Object Library . Щелкните правой кнопкой мыши библиотеку и выберите вид. Найдите кокласс, представляющий элемент управления, и выберите его:

alt text

Как видно, интерфейс по умолчанию для 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, но я все же хотел бы узнать о других элементах управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top