Newsgroup: it.comp.lang.visual-basic
Titolo: [?] vbmodal e focus

da un primo form mdichild ne chiamo uno modale.
sul secondo ci sono alcuni txt e un cmdOK:
Private Sub cmdOK_Click()
    Dim rs As Recordset
    Set rs = mainDB.OpenRecordset("xautori")
    With rs
        .AddNew
        !autnome = Trim(txtAutNome)
        ...
    End With
    Set rs = Nothing
'    With frmAutori 'quello da cui chiamo questo form
'        .cboIndex = "AUTORE"
'        .Data1.Recordset.Index = .cboIndex
'        .Data1.Recordset.Seek "=", Trim(txtAutNome)
'        .ZOrder
'    End With
    Unload Me
End Sub
rendendo attiva la parte commentata funzionerebbe benone, non fosse che
quando si chiude questo modale il frmAutori non prende piu' il focus neanche
morto. (cioe', morto si', se lo chiudo e riapro). il bello e' che il
datacontrol reagisce correttamente ai comandi dalla toolbar sul frmMain mdi
(movenext ecc). ma il frmAutori, anche a cliccarci sopra, nisba.
commentando come sopra, tutto regolare, anche se non posso visualizzare
subito quello che ho appena immesso. la cosa in se' m'importa meno, vorrei
solo capire lo strano comportamento del focus.
pf non ditemi di togliere i datacontrol.
devo consegnare al piu' tardi l'altroieri...
grazie,
j.vbmodal

 ha scritto
| da un primo form mdichild ne chiamo uno modale.
| sul secondo ci sono alcuni txt e un cmdOK:
|
| Private Sub cmdOK_Click()
[...]
| End Sub
|
| quando si chiude questo modale il frmAutori non prende piu' il focus neanche
| morto. (cioe', morto si', se lo chiudo e riapro). il bello e' che il
[...]
1) Hai provato a togliere solo l'istruzione ".ZOrder"?
2) Dov'e' che richiami il form modale? All'interno dell'evento X o della procedura X?
    a) Nella "cmdOK_Click" potresti fare l'hide anziche' l'unload del form ed il codice commentato
(che segue) lo piazzi nella procedura X dopo il Form2.show 1
' NEL FORM AUTORI
Sub X
    [...]
    Form2.Show 1 ' richiami il form modale
    cboIndex = "AUTORE"
    Data1.Recordset.Index = cboIndex
    Data1.Recordset.Seek "=", Trim(Form2.txtAutNome)
    ZOrder
    [...]
End Sub
    b) Se non trovi soluzione al problema potresti provare ad aggirarlo: sposta il codice della
"cmdOK_Click" all'interno della procedura X modificando la "cmdOK_Click" cosi'.
' NEL FORM2
Private Sub cmdOK_Click()
    bOkBtnPressed = True
    Me.Hide
End Sub
' NEL FORM AUTORI
Sub X
    Form2.Show 1
    if Form2.bOkBtnPressed Then
        Dim rs As Recordset
        Set rs = mainDB.OpenRecordset("xautori")
        ...
    Endi If
End Sub

Ah! L'unload del form modale lo fai nel form autori che lo ha richiamato...

 Ah! L'unload del form modale lo fai nel form autori che lo ha
richiamato...
grazie delle dritte, provo un po' a smacchinare.
ciao, j.

 ha scritto nel messaggio
news:9uo9qr$9n4ea$1...@ID-51318.news.dfncis.de...

Infatti questo č il modo giusto:
--- Form2 ---
Public ModalResult as VBMsgBoxConstants
Sub Form_Load
    ModalResult = vbCancel
End Sub
Sub cmdOk_Click
    ModalResult = vbOk
End Sub
--- Form1 ---
Sub Form1_evento
    Form2.Show vbModal
    Select Case Form2.ModalResult
    [...]
    Unload Form2
    Set Form2 = Nothing
End Sub
Questo fa sě che se uso Form2 per un'altro motivo da un'altra form non devo
rimetterci mano e pasticciare form2, o peggio, riscrivermi un form3 uguale
ma con codice differente
Non fare anche tu gli incroci magici come i miei colleghi!
Il form Chiamato *non* deve sapere da chi č stato chiamato!
Ciao

 Il form Chiamato *non* deve sapere da chi è stato chiamato!
grazie, terro' presente.
in questo caso, cmq, frm2 puo' essere chiamato solo da un cmd che sta su
frm1.
conosco i miei utenti...
e i loro programmatori :)
ciao, j.