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

Foi útil?

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:

alt text

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top