Newsgroup: it.comp.lang.visual-basic
Titolo: doppio click su flexgrid quano dura?

ciao ho due flexgrid
una flex2.visibile = true
una flex1.visibile = false
le due sono posizionate nello stesso punto
scegliendo con doppio click sulla seconda la rendo invisibile e nel
frattempo carico nella prima dei dati legati alla scelta sulla seconda
ho notato  che dopo che la seconda scompare premo anche la prima come mai?
ho provato ad invertire il codice oppure   rendere la flex1 piu' grande solo
dopo e anche con enabled , ma e' lo stesso perche'
private sub flex2_dblclick()
flex1.visibile = treu
flex2.visibile = false
end sub
nella
private sub  flex1_click
label1.caption "mi hai premuto"
end sub
ciao e grazie

 end sub
Forse perchè treu è un ex ministro? (che ora vale 0, senza offesa, ovvero
pari a una variabile non assegnata)


scusa ma scrivo sempre di fretta ,era true e non va
ciao Ilario


sparo quindi non cazziatemi piů di tanto.
la cosa potrebbe essere dovuta alla gestione dei messaggi di win;
ovvero un doppio click in verita genera una moltitudine di messaggi che
vengono poi gestiti dalla finestra, se non ricordo male sono nell'ordine
mouse_down, mouse_up,dblclick,mouseup.
i primi tre gestiti da l flex2 il quarto "catturato" dal flex1 e
interpretato come click().
puoi verificarlo facendo doppio click senza pero rilasciare il secondo
click.
flex2_dblclick viene eseguito e flex1_click viene eseguito solo quando
rilasci il bottone del mouse (e solo se ci sei ancora sopra:-)
prima soluzione che mi viene in mente e che provata funziona č:
la flex2.visibile = true
la flex1.visibile = false
il timer1.interval =100
il timer1.enabled = false
Private Sub flex2_dblclick()
Timer1.Enabled = True
flex2.Visible = False
End Sub
Private Sub flex1_click()
Label1.Caption = "mi hai premuto"
End Sub
Private Sub timer1_timer()
Timer1.Enabled = False
flex1.Visible = True
End Sub
ovviamente bisogna sperare che l'utente rilasci il bottone entro
timer1.interval millisecondi altrimenti siamo daccapo.

 ha scritto

gia', c'e' una differenza di comportamento:
Option Explicit
Private Sub f1_Click()
    Print "f1click"
End Sub
Private Sub f1_DblClick()
    f1.Visible = False
    f2.Visible = True
    Print "f1dblclick"
End Sub
Private Sub f2_Click()
    Print "f2click"
End Sub
Private Sub f2_DblClick()
    f2.Visible = False
    f1.Visible = True
    Print "f2dblclick"
End Sub
Private Sub Label1_Click()
    Print "label1click"
End Sub
Private Sub Label1_DblClick()
    Label1.Visible = False
    Label2.Visible = True
    Print "label1dblclick"
End Sub
Private Sub Label2_Click()
    Print "label2click"
End Sub
Private Sub Label2_DblClick()
    Label2.Visible = False
    Label1.Visible = True
    Print "label2dblclick"
End Sub
anche stando attento a non far sovrapporre click e 2click, sul label la
sequenza al 2clic sembra
    clic
    2clic
sulla flex
    clic
    2clic
    clic -> intercettato da flex1
per curiosita' ho provato anche con una doppia datagrid, e si comporta come
l'etichetta.
ciao

 ho notato  che dopo che la seconda scompare premo anche la prima come mai?
E' normale (sic!): Al DoubleClick sulla flex2 gliela togli da sotto ed
esponi (sempre sotto al mouse) la Flex1.
Questa sente il rilascio del pulsante (diciamo MouseUp) e lo esegue come
click.
Nota infatti che se fai click su un bottone, l'evento click si scatena al
rilascio del mouse, non alla sua pressione.
L'anomalia non ha niente a che vedere col _normale_ comportamento, per
esempio, dei bottoni (ma anche della flex) che possono essere cliccati e si
può eliminare "il click in sospeso" rilasciando il mouse al di fuori
dall'oggetto stesso, ovvero dall'oggetto che "ha archiviato" il primo
MouseDown.
Sicuramente tutto dipende dal fatto che l'oggetto che ha archiviato il
MouseDown viene eliminato (reso invisibile) e il sistema non può che basarsi
su quello che gli resta...
Prova con modifiche di questo tipo:
'    In zona dichiarazioni del form
Dim dc_da_flex2 As Boolean
Private Sub flex2_dblclick()
    dc_da_flex2 = True
    flex2.Visible = False
    flex1.Visible = True
End Sub
Private Sub flex1_click()
    If dc_da_flex2 = True Then
        dc_da_flex2 = False
        Exit Sub
    End If
    Label1.Caption = "mi hai premuto"
'    Resto del codice da eseguire per l'effettivo click della flex1
End Sub
Private Sub Form_Load()
    dc_da_flex2 = False
    flex2.Visible = True
    flex1.Visible = False
    flex1.AddItem "1"
    flex2.AddItem "2"
End Sub

 esponi (sempre sotto al mouse) la Flex1.
sara' normale per la flex e forse altri controlli, ma non per label e
datagrid, e a naso per la maggioranza dei controlli.
i command sono un altra cosa, visto che almeno logicamente escludono il
2clic.
ciao

 ha scritto

clic semplice ?
imho molto meglio un command "show1 / show2"
ciao

 ciao
cavolo che strano ... ho provato con un doevents ma nulla , mantenendo il
mouse giu' sul secondo click infatti il Dblclick viene generato
correttamente da flex1, al mouse_up la flex2 si ciuccia il click :-/ sto
arraffone ...
in pratica sti cavolo di messaggi sono diversi in base all livello
dell'oggetto oppure cosa ?
Con un textbox funge bene ..
Forse solo i controlli "complessi" come le griglie si comporta cosi ?
bha ... sto provando con tutti i controlli da quelli standard a quelli
common ... bha ... che stranooooo !
-- 
<Gigio2K>
Sito Comune
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

ok ora funzioan bene
grazie mille Ilario

 datagrid, e a naso per la maggioranza dei controlli.
Hai ragione. Forse il fatto di esserci incappato piů d'una volta (non saprei
con quali controlli, non con la flex che non uso), mi ha fatto "assimilare"
l'idea che sia sempre cosě...