Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    7

    [VB] uso della showdialog()

    Buongiorno,
    sto sviluppando una piccola applicazione in VB 2005 e ho un problema di gestione della chiusura del form utilizzando la showdialog().
    Ho due form, form1 e form2 e la form2 la apro utilizzando la showdialog() per non permettere l'utilizzo della 1 fintanto che la 2 non viene chiusa.
    Ho messo un controllo che chiede la conferma all'utente se vuole chiudere il form, ma anche se la risposta e' no il form si chiude lo stesso.
    Questo non mi capita se uso la show(), funziona perfettamente, ma in questo caso non so come gestire il fatto che il form1 non deve essere "toccato" fintanto che il form2 rimane aperto.

    Le righe di codice in questione sono le seguenti:

    Esito = MsgBox("Vuoi uscire?", vbYesNo, "Attenzione")
    If Esito = vbYes Then
    frm.AcceptButton.PerformClick()
    frm.Close()
    Else
    Exit Sub
    End If

    Grazie per l'aiuto!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970

    Re: [VB] uso della showdialog()

    Stiamo parlando di VB.NET giusto?

    codice:
    Esito = MsgBox("Vuoi uscire?", vbYesNo, "Attenzione")
    If Esito = vbYes Then
    frm.AcceptButton.PerformClick()
    frm.Close() 
    Else
    Exit Sub
    End If
    C'è qualcosa che non capisco....ma cos'è
    codice:
    frm.AcceptButton.PerformClick()
    :master:

    Lascia perdere quello che hai scritto e rifai tutto, allora se metti un Button di chiusura Form (il classico pulsante con scritto 'Chiudi') il codice potrebbe essere il seguente:

    codice:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                If MessageBox.Show("Sei sicuro di voler uscire?", "Info", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then Exit Sub
                Me.Close()
            Catch ex As Exception
            End Try
        End Sub
    Se non vuoi mettere nessun pulsante di chiusura ma chiudere la Form dalla X in alto a destra:

    codice:
    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            Try
                If MessageBox.Show("Sei sicuro di voler uscire?", "Info", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then Exit Sub
                e.Cancel = True
            Catch ex As Exception
            End Try
        End Sub

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    7
    Si, stiamo parlando di VB.NET

    cos'e'

    frm.AcceptButton.PerformClick()
    ?

    spero di riuscire a spiegarmi come si deve: nel mio form ho messo un bottone di chiusura form (Chiudi). Quando l'utente vuole chiudere ma si e' dimenticato di salvare i dati inseriti nel form, prima di uscire faccio eseguire il codice che ho inserito nel bottone "salva", che ho definito nelle proprieta' del form come AcceptButton (quando l'utente clicca sul tasto il tasto Enter). Questo funziona correttamente.

    Ho provato a riscrivere il codice come mi hai suggerito, ma il risultato non cambia, quando clicco su NO alla domanda "Sei sicuro di voler uscire?" mi chiude il form, quando invece dovrebbe rimanere aperto.

    Questo me lo fa se apro il form con una ShowDialog, se invece uso la Show funziona correttamente. :master:

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    cos'e'
    frm.AcceptButton.PerformClick()
    ?
    Ma prima di tutto continuo a non capire cosa chiami questa linea di codice?? Una ruotine esterna alla Form? Perche chiami una Routine che risiede nella classe del Form utilizzando frm.AcceptButton.PerformClick() ???????
    E cos'è .PerformClick ???? E' un evento??

    Ho provato a riscrivere il codice come mi hai suggerito, ma il risultato non cambia, quando clicco su NO alla domanda "Sei sicuro di voler uscire?" mi chiude il form, quando invece dovrebbe rimanere aperto.
    Impossibile, che soluzione hai provato nel tuo codice, la prima o la seconda? Hai provato anche quella in cui metti la Dialog nell'evento ' Form1_FormClosing' ??

    Prova a postare qualche linea di codice in più, manca qualcosa che non hai scritto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    7
    Problema risolto e scoperto l'inghippo, almeno credo

    Come mi hai suggerito ho provato entrambi i controlli, sia sull'evento 'Form1_FormClosing' che sulla "chiudi", ma nella form padre avevo temporaneamente messo a false la proprieta' ControlBox in quanto non riuscivo a capire quale fosse l'evento che gestisce la chiusura dalla X, e volevo evitare la chiusura imprevista del form (ammetto che sono alle prime armi con VB e ogni giorno e' una nuova scoperta... ).
    a quanto pare questo portava alla chiusura della form figlio nonostante il codice di gestione nei due eventi.
    Grazie al tuo suggerimento ho scoperto qual e' l'evento per gestire la chiusura dalla X e riabilitando la proprieta' si e' messo a funzionare correttamente.

    per quanto riguarda la chiamata

    frm.AcceptButton.PerformClick()

    in effetti avevo scritto una routine esterna da richiamare dalle varie form che dovranno eseguire la stessa serie di azioni, per semplificarmi la vita, e ho forse semplificato in maniera non pertinente il codice che ho messo qui come esempio.

    l'idea e' quella di avere una routine che viene richiamata quando l'utente clicca su "chiudi" o su X, dopo aver modificato i campi del form, e salvare prima di chiudere nel caso si sia dimenticato di farlo o abbia cliccato sul bottone sbagliato per errore (si sa che gli utenti sono capaci di fare azioni imprevedibili e poi dare la colpa a te, misero sviluppatore che non risiedi nella loro mente bacata e non godi di tanta fantasia quanto loro, che non funziona).

    Per cui la domanda "vuoi uscire?" in realta' voleva essere "vuoi salvare prima di uscire?"
    in caso affermativo l'azione da compiere e' quella del bottone che ho assegnato alla proprieta' AcceptButton del form, ossia il bottone Salva.

    PerformClick() e' il metodo che permette di eseguire l'azione del click sul bottone in questione.

    Adesso pero' ho un altro problema che nasce a seguito dell'inserimento del controllo su X: nel form c'e' un controllo sulla modifica di alcuni campi, per vedere se l'utente ha effettuato delle modifiche o ha aperto il form solo per consultazione.
    Per i vari campi "sensibili" ho aggiunto la gestione Field_LostFocus e al suo interno verifico se Field.Modified e' True, e in caso affermativo chiedo conferma dell'uscita senza salvataggio.
    Ho notato che se clicco dal bottone Chiudi il controllo sul campo funziona correttamente, se invece clicco su X dopo aver modificato il campo la Field.Modified mi rimane a false anziche' essere true e quindi il controllo va a farsi benedire.


    Ne approfitto per ringraziarti per i tuoi suggerimenti, che mi sono stati molto utili e mi hanno aiutato a risolvere il problema e ad imparare cose nuove.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ma i tuoi campi sono delle TextBox?

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    7
    Alcuni sono delle textbox e altri delle combo.

    Stavo riguardando proprio ora la cosa e mi sa che forse dovrei usare il metodo TextChanged o SelectedIndexChanged, ma se ho optato per il giro che ti ho descritto e' perche' probabilmente avevo gia' provato con questi e riscontrato un problema, anche se ora ho un vuoto di memoria e non ricordo il perche' di questa mia scelta :master:

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Stavo riguardando proprio ora la cosa e mi sa che forse dovrei usare il metodo TextChanged o SelectedIndexChanged, ma se ho optato per il giro che ti ho descritto e' perche' probabilmente avevo gia' provato con questi e riscontrato un problema, anche se ora ho un vuoto di memoria e non ricordo il perche' di questa mia scelta.
    Mi sembrano molto più opportuni i metodi sopra citati..

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    7

    Grazie!!!

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Moderazione

    Originariamente inviato da jeygi
    Si, stiamo parlando di VB.NET
    Va indicato anche nel titolo, come da Regolamento.

    Qui l'ho aggiunto io.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.