Descoberta de propriedade padrão do controle ActiveX
Pergunta
É possível determinar qual propriedade de um controle ActiveX é a propriedade padrão?Por exemplo, qual é a propriedade padrão do controle VB6 CommandButton e como eu descobriria qualquer outro controle padrão!
/EDITAR: Sem ter origem no próprio objeto
Solução 3
Use o OLE/Com Object Viewer, que é distribuído com o Microsoft Visual Studio.
Vá para bibliotecas de tipo e encontre a biblioteca na qual o controle está armazenado, por exemplo, CommandButton está armazenado em Biblioteca de objetos do Microsoft Forms 2.0.Clique com o botão direito na biblioteca e selecione visualizar.Encontre a coclasse que representa o controle e selecione-a:
Como pode ser visto, a interface padrão para CommandButton é ICommandButton, ao inspecionar ICommandButton procure uma propriedade que tenha um dispid de 0.O IDL para a propriedade dispid 0 do 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();
Mostrando a propriedade padrão.
Outras dicas
Eu não uso VB, mas aqui vai.
eu encontrei Usando o valor de um controle, mas não é uma solução programática.Se você tiver acesso ao código, procure
Attribute Value.VB_UserMemId = 0
usando o bloco de notas.
Depende de quando você deseja determinar isso.Você poderia imprimir o "valor" de, digamos, um controle de rótulo (que não possui propriedade "valor") para o depurador como:
debug.print "Value for cmdTest is ["+format(cmdTest)+"]"
O que lhe dará algo como:
O valor para cmdTest é [Falso]
Acontece que o valor padrão para um botão de comando é seu estado (pressionado ou não), portanto, se você colocar o exemplo de código acima no evento click do controle, verá "True", se executá-lo em outro lugar , você verá "Falso".
Para outros resultados, este método mostrará pelo menos o tipo de imóvel que você procura.Você poderia usar:
debug.print "cmdTest's value is of type ["+TypeName(oObject) +"]"
que informa o tipo real, a saber:
O valor do cmdTest é do tipo [Boolean]
Você pode usar vários métodos para restringir as coisas, como definir o valor e ver o que acontece.
você tem acesso ao código, procure
Infelizmente não tenho acesso ao código da maioria dos controles.Porém o link é útil para os Controles da Microsoft, mas ainda gostaria de saber para outros controles.