Newsgroup: it.comp.lang.visual-basic
Titolo: libreria Unknown68 e controllo fantasma picButton

Salve a tutti. Questa ancora non l'avevo vista da nessuna parte.
VB6. Sto sistemando la sequenza dei TabIndex dei controlli di un form e
durante i test a runtime, mentre mi muovo con Tab e Shift+Tab, ogni tanto
sembra che il focus mi sparisca.
Allora interrompo l'esecuzione, e nella finestra Immediata scrivo
?
me.ActiveControl.name
, e il risultato è che il controllo attivo si chiama
picButtons. "Non mi sembrava di avere un controllo con qs. nome. Bah, sarà
una vecchia prova che mi sono dimenticato..." e invece, nella lista dei
controlli nella finestra Proprietà non c'è!
Ohibò, mi sarò sbagliato. Rieseguo il test daccapo, finestra Immediata ... e
ancora picButton. Dopo aver controlllato benebene, ripulito gli occhiali,
accertato che sono sveglio, scrivo ?picButtons.Left ma mi viene fuori un
errore "Necessario oggetto", e anche se tento di leggere qualche altra
proprietà, come ad esempio il TabIndex. Porcazozza, ho un fantasma nel pc.
Premo F2 e cerco picButtons, ed effettivamente il Visualizzatore oggetti mi
mostra quanto segue:
WithEvents picButtons As PictureBox
    sola lettura
    Membro di Unknown68._MDIForm
e in alto mi dice che la libreria Unknown68 contiene la classe _MDIForm di
cui fa parte il membro picButtons.
Se clicco su Unknown68, una msgbox mi dice "Impossibile passare a
'Unknown68' perché si trova nella libreria 'Unknown68' alla quale non viene
fatto alcun riferimento."
Se clicco su _MDIForm, una msgbox mi dice "Impossibile passare a '_MDIForm'
perché si trova nella libreria 'Unknown68' alla quale non viene fatto alcun
riferimento." Il nome nella msgbox è stato aggiornato, quindi la libreria
esiste davvero.
Cliccando con il destro su uno dei due oggetti Unknown68 o _MDIForm e
scegliendo Riferimenti mi si apre la finestra Riferimenti, dove appare
selezionato l'ultimo riferimento spuntato: Microsoft ActiveX Data Objects
Recordset 2.8 Library, cioè msador15.dll (però devo anche dire che qs.
libreria sembra che sia selezionata ogni volta che apro la finestra
Riferimenti).
Naturalmente, per chi non lo avesse capito, nel progetto utilizzo ADO 2.8 e
una form MDI, e il baco si manifesta in una form MDIChild, e solo in quella.
Insomma, nella mia form c'è un oggetto nascosto, che io non posso né vedere
né impostare né cancellare, ma che si becca il focus quando mi muovo con il
Tab. Ho googlato un po' ma non ho trovato nulla, nemmeno in inglese.
Qualcuno ha idea di cosa diamine stia succedendo al mio progetto? Pensavo
che il buon vecchio, collaudato VB6 fosse immune da questi bachi occulti, se
non altro perché ormai è largamente conosciuto, testato ed esplorato.
Leggerò ogni risposta con attenzione, anche quelle che citano X-Files. Ciao
a tutti.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 a tutti.
Ciao,
sinceramente non so darti una spiegazione;
hai provato però ad aprire con il notepad il form incriminato e ad 
eliminare l'evenutale riferimento all'oggetto da lì?
ciao
stefano


Ciao. Si, ho provato, e ho provato anche sul file .vbp del progetto. Ma come
pensavo non c'è alcun riferimento né a un oggetto picButtons, né ad una
libreria Unknown68, né a un oggetto _MDIForm.
E naturalmente non c'è un oggetto picButtons nell'intero progetto, anche se
ho solo fatto la ricerca con Ctrl+F. Oggi devo aprire tutte le altre form
col Notepad, ma sono sicuro di non trovare nulla, anche perché non ho mai
utilizzato un oggeto con quel nome.
Ho anche continuato a googlare ma senza successo.
Ogni altro indizio è bene accetto.



Hai provato a dare una passata al registry? Magari ti scappa fuori
qualche indizio in piů.
Ciao

 qualche indizio in piů.
Nulla nemmeno nel registry (intanto quello continua a grabbarsi il focus,
anche da compilato)....


anche da compilato)....
A sto punto proverei anche con l'OLE/COM Object Viewer a cercare sta
fantomatica libreria. Hai visto mai.
Ciao

 focus, anche da compilato)....
Ancora nessun indizio?
-- 
Greg 

> Ancora nessun indizio?
Dunque, ho scoperto che picButtons è una picturebox che sta sul form MDI.
Cioè sembra che ciclando con il tasto Tab tra i controlli della form
(MDIChild) a un certo punto il focus venga assunto da un controllo della
form MDI. Questo accade soltanto su una MDIChild, le altre funzionano a
modo. Inoltre la cosa strana è che se io interrogo la proprietà Parent del
controllo picButtons (dopo ?
Me.ActiveControl.Name
 nella finestra Immediata,
che restituisce "picButtons", ho scritto ?
Me.ActiveControl.Parent.Name
)
ottengo il nome della form child, sebbene la picturebox sta sulla form MDI.
Com'è 'sto fatto? Può il focus "uscire" da una form MDIChild e poi
"rientrarci" sopra? E perché la proprietà Parent di questo controllo è
diversa?
Domani farò altre prove, e poi vi farò sapere. Per ora, grazie a tutti per
l'interessamento, e continuate pure a scrivere se vi vengono altre idee.



Rieccomi. Ho fatto prove per un paio di giorni. Sebbene non sia riuscito a
capire né perché talvolta il focus "esca" dalla form child per poi
rientrare, né perché quando ho cercato il nome picButtons nel testo del file
.vbp non l'ho trovato, ho aggirato la cosa ex-abrupto impostando la
proprietà TabStop della picturebox a False.
Però il problema non è risolto anzi, se possibile, si è complicato. Ma dato
che il subject di qs. thread non è più appropriato aprirò una nuova
discussione in mattinata, per spiegare gli sviluppi e chiedere lumi. Quindi
per adesso ringrazio tutti, ma vi aspetto ancora nell'altra discussione.


Salve a tutti. Alla fine non ho aperto un'altro topic ma mi sono accodato a
quello vecchio, anche se ho cambiato il subject.
Il problema della picturebox sulla form MDI che si grabbava il focus l'ho
aggirato impostando a False la proprietà TabStop della picturebox stessa,
sebbene non ho ancora capito come mai il focus "esce" dalla form child e va
sulla form MDI per poi rientrare sul child alla successiva pressione di Tab,
e nemmeno perché la proprietà Parent della picturebox restituisca il nome
della form child.
Evitata la "fuga" del focus dalla form, il secondo problema che ho
incontrato era più subdolo: premendo ripetutamente Tab il focus cicla
correttamente tra i controlli seguendo l'ordine stabilito dalla proprità
TabIndex, ma premendo Shift+Tab per invertire l'ordine alcuni controlli
vengono saltati! Cioè: se vado avanti il focus passa su ognuno, se vado
indietro ne salta qualcuno. Com'è possibile?
I controlli sono posizionati sulle varie schede di un controllo SSTab, e
alcuni sono inseriti dentro dei Frame. Bene, quelli che vengono saltati sono
quelli che sono fuori da un frame. Cioè: se una combo o un commandbutton sta
dentro un frame riceve il focus sia andando avanti sia andando indietro,
altrimenti riceve il focus solo andando avanti.
Mi ci è voluto tempo per accorgermi di questo comportamento, non per trovare
una scappatoia - che consiste nell'inserire tutti i controlli in un frame
con BorderStyle impostato a "0 - None" - ma non ho capito se questo baco
deriva dall'utilizzo del controllo SSTab, dal form MDIChild, dall'utilizzo
di controlli Frame, o da cos'altro.
Se qualcuno ne sa qualcosa di più, leggerò con attenzione il suo commento.
Per ora, in attesa di una soluzione più elegante, posto qui il problema per
la memoria di Google. Grazie a tutti.
