Individuazione delle proprietà predefinite del controllo ActiveX
Domanda
È possibile determinare quale proprietà di un controllo ActiveX è la proprietà predefinita?Ad esempio, qual è la proprietà predefinita del controllo CommandButton VB6 e come potrei scoprire eventuali altri controlli predefiniti!
/MODIFICARE: Senza avere origine per l'oggetto stesso
Soluzione 3
Utilizzare OLE/Com Object Viewer, distribuito con Microsoft Visual Studio.
Vai alle librerie dei tipi e trova la libreria in cui è ospitato il controllo, ad esempio in cui è archiviato CommandButton Libreria di oggetti Microsoft Forms 2.0.Fare clic con il tasto destro sulla libreria e selezionare Visualizza.Trova la coclasse che rappresenta il controllo e selezionala:
Come si può vedere, l'interfaccia predefinita per CommandButton è ICommandButton, quando controlli ICommandButton cerca una proprietà che abbia un dispid pari a 0.L'IDL per la proprietà dispid 0 di 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();
Mostrandoti la proprietà predefinita.
Altri suggerimenti
Non uso VB, ma eccolo qui.
ho trovato Utilizzo del valore di un controllo, ma non è una soluzione programmatica.Se hai accesso al codice, cerca
Attribute Value.VB_UserMemId = 0
utilizzando il Blocco note.
Dipende da quando vuoi determinarlo.Potresti stampare il "valore", ad esempio, di un controllo etichetta (che non ha la proprietà "valore") nel debugger come:
debug.print "Value for cmdTest is ["+format(cmdTest)+"]"
Che ti darà qualcosa come:
Il valore per cmdTest è [False]
A quanto pare, il valore predefinito per un pulsante di comando è il suo stato (premuto o meno), quindi se inserisci l'esempio di codice sopra nell'evento click per il controllo, vedrai "True", se lo esegui da qualche altra parte , vedrai "Falso".
Per altri risultati, questo metodo ti mostrerà almeno il tipo di proprietà che stai cercando.Potresti usare:
debug.print "cmdTest's value is of type ["+TypeName(oObject) +"]"
che ti dicono il tipo reale, vale a dire:
Il valore di cmdTest è di tipo [Booleano]
Potresti utilizzare vari metodi per restringere il campo, ad esempio impostare il valore e vedere cosa succede.
hai accesso al codice, cerca
Sfortunatamente non ho accesso al codice per la maggior parte dei controlli.Tuttavia il collegamento è utile per i controlli Microsoft, ma vorrei comunque avere un modo per saperlo per altri controlli.