Problema al ritorno da un form chiamato

di il
6 risposte

Problema al ritorno da un form chiamato

Buongiono mi si è presentato un problema che non riesco a risolvere :
Vorrei fare una scelta di una ditta da inserire in una text.box aprendo un form da cui selezionarla, la stessa operazione lo eseguita in un'altra parte del programma partendo da un button e non ho problemi.Ma se apro il form partendo dalla text box alla chiusura del form di scelta, l'esecuzione non passa all'istruzione successiva alla chiamata del form , ma ricomincia dall'inizio della sub.
Dove sbaglio??
grazie per l'eventuale risposta

6 Risposte

  • Re: Problema al ritorno da un form chiamato

    Prova a mostrare il codice che chiama la form
  • Re: Problema al ritorno da un form chiamato

    Questa è la parte che chiama la form
    Private Sub txtDitta_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtDitta.GotFocus
    Stop
    Dim obj As New frmSCELTA_DITTE_SETTORI_PRODOTTI
    obj.Scelta_Ditta_Settore = "Ditta"
    obj.ShowDialog()
    txtDitta.Text = obj.Scelta_Ditta_Settore
    Stop
    End Sub
    In esecuzione mi aspetto che al ritorno il programma si fermi al secondo stop, invece riparte la sub e si ferma al primo.
    Per uscire dalla form chiamata utilizzo un button che esegue Me.Close() e Me.Dispose().
    Addirittura:
    Se nella form chiamata una volta fatta la scelta, utilizzo la X per uscire quindo eseguendo la Cosing con Me.Close() e Me.Dispose() dopo alcuni secondi il programma mi va in errore segnalando sul Me.Close():

    Eccezione non gestita di tipo 'System.StackOverflowException' in System.Windows.Forms.dll

    Devo aver creato un po' di caos

    grazie
  • Re: Problema al ritorno da un form chiamato

    Sembrerebbe che la gotfocus venga richiamata più volte. Ti consiglio di inserire un semplice flag/semaforo globale: lo setti a 0 nell'inizializzazione della form "padre", nella routine GotFocus esci subito se é 1 altrimenti prosegui e lo setti a 1 subito per poi settarlo a 0 prima di uscire.
    In questo modo previeni eventuali "annidamenti".
  • Re: Problema al ritorno da un form chiamato

    MARCO1959 ha scritto:


    Devo aver creato un po' di caos
    Credo proprio di sì.

    1°: non è una buona pratica 'tentare' di fare debug del codice in un evento usando Stop.
    Piuttosto usa Debug.Print per ottenere un feedback:



    2°: Gli eventi, in generale, sono routine particolari perché interagiscono direttamente con la coda dei messaggi di Windows.
    Alcuni tipi di eventi, come GostFocus, LostFocus, e così via, sono evento speciali perché coinvolgono altri eventi e non devono mai essere 'bloccati' perché devono 'rispondere a Windows' che li deve gestire nella coda dei messaggi.
    Il flusso dei messaggi (di Windows) non può bloccato negli eventi, perché se lo fai, di fatto, Windows interviene in modo arbitrario e gli effetti diventano né prevedibili, né gestibili.


    3°) Nel caso specifico poi, in un evento tu 'pretendi' addirittura di mostrare un form modale.
    Come vedi, e te ne accorgi da te, non è assolutamente una pratica da usare in un evento.

    Usa l'evento click del pulsante.

  • Re: Problema al ritorno da un form chiamato

    Ringrazio candaluar per il suggerimento alla soluzione al problema, ci provo, e ringrazio gibra per il suggerimento di approcciare in modo completamente diverso il problema
  • Re: Problema al ritorno da un form chiamato

    Spero di aver risolto creando un button invisibile che richiama la form secondaria. In uscita da una text_box ( lost_focus ) richiamo il button_click.

    Ringrazio ancora per i suggerimenti
Devi accedere o registrarti per scrivere nel forum
6 risposte