Vb net - Messagebox e showdialog

di il
11 risposte

Vb net - Messagebox e showdialog

Buongiorno a tutti!

Premettendo che sono un neofita della programmazione ed autodidatta, ho un problema che non sono in grado di risolvere.

Ho scritto un breve programma con 2 windows form.
Nel form1 ho inserito un button che mi apre con un showdialog il form2.
Nel form2 ho inserito 2 campi textbox ed un button che salva su file i dati inseriti nelle textbox.

Cliccando sul button nel form2 mi controlla se i valori inseriti non sono eccessivamente distanti, e nel caso, mi apre una messagebox che mi invita a controllare i dati inseriti.
Cliccando su sì, il programma mi salva correttamente; cliccando su no, speravo mi riportasse il cursore sulla textbox1, ma invece mi chiude il form2 e mi riporta allo showdialog del form1.

Spero in un vostro aiuto. Di seguito posto il codice che ho scritto

'form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
   Form2.ShowDialog()
End Sub

'form2

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    If TextBox1.Text <> "" Then
    	dim valore1 As Double = cdbl(textbox1.text)
    else
    	dim valore1 as double = 0
    end if
    
    If TextBox2.Text <> "" Then
    	dim valore2 As Double = cdbl(textbox2.text)
    else
    	dim valore2 as double = 0
    end if
    	
    If Math.Abs(valore1 - valore2) > 30 Then
        Dim messaggio As String = "Valori fortemente distanti" & vbCrLf & "Confermare?"
        Dim titolo As String = "ANOMALIA"
        Dim bottone As MessageBoxButtons = MessageBoxButtons.YesNo
        Dim icona As MessageBoxIcon = MessageBoxIcon.Information
        Dim messaggiofondocassa as dialogresult = MessageBox.Show(messaggio, titolo, bottone, icona)
        If messaggiofondocassa = Windows.Forms.DialogResult.Yes Then
            Call Salvataggio() 'chiama una function per il salvataggio del file
            Form1.Show()
            Me.Close()
        End If
        If messaggiofondocassa = Windows.Forms.DialogResult.No Then
            TextBox1.Focus()
        End If
    Else
        Call Salvataggio()
        Form1.Show()
        Me.Close()
    End If
End Sub

11 Risposte

  • Re: Vb net - Messagebox e showdialog

    A parte il fatto che nel Form2 il codice iniziale corretto è questo

           Dim valore1 As Double = 0
           Dim valore2 As Double = 0
           
           If TextBox1.Text <> "" Then
               valore1 = CDbl(TextBox1.Text)
           End If
           If TextBox2.Text <> "" Then
               valore2 = CDbl(Textbox2.text)
           End If

    per il resto non mi pare di rilevare il problema di cui parli. Se indico No il focus torna sul Textbox1.

    Inoltre, nel Form2 le due righe con Form1.Show() non servono

  • Re: Vb net - Messagebox e showdialog

    Grazie per la risposta e le correzioni che ho immediatamente apportato.

    ho provato ad impostare il focus sulla textbox2 in seguito a risposta NO nella messagebox.

    Di nuovo il form2 si chiude e se lo riapro con il button1 nel form1 il cursore effettivamente è nella textbox2 del form2.

  • Re: Vb net - Messagebox e showdialog

    Allora hai altro codice in Forn2 che non hai mostrato.

    Magari nel codice della Sub Salvataggio

    Se posso scaricare il tuo progetto zippato cerchiamo di capire il mistero

  • Re: Vb net - Messagebox e showdialog

    21/01/2024 - Cor29 ha scritto:


    Buongiorno a tutti!

    Premettendo che sono un neofita della programmazione ed autodidatta, ho un problema che non sono in grado di risolvere.

    Ho scritto un breve programma con 2 windows form.
    Nel form1 ho inserito un button che mi apre con un showdialog il form2.
    Nel form2 ho inserito 2 campi textbox ed un button che salva su file i dati inseriti nelle textbox.

    Cliccando sul button nel form2 mi controlla se i valori inseriti non sono eccessivamente distanti, e nel caso, mi apre una messagebox che mi invita a controllare i dati inseriti.
    Cliccando su sì, il programma mi salva correttamente; cliccando su no, speravo mi riportasse il cursore sulla textbox1, ma invece mi chiude il form2 e mi riporta allo showdialog del form1.

    Spero in un vostro aiuto. Di seguito posto il codice che ho scritto

    'form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       Form2.ShowDialog()
    End Sub
    
    'form2
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
        If TextBox1.Text <> "" Then
        	dim valore1 As Double = cdbl(textbox1.text)
        else
        	dim valore1 as double = 0
        end if
        
        If TextBox2.Text <> "" Then
        	dim valore2 As Double = cdbl(textbox2.text)
        else
        	dim valore2 as double = 0
        end if
        	
        If Math.Abs(valore1 - valore2) > 30 Then
            Dim messaggio As String = "Valori fortemente distanti" & vbCrLf & "Confermare?"
            Dim titolo As String = "ANOMALIA"
            Dim bottone As MessageBoxButtons = MessageBoxButtons.YesNo
            Dim icona As MessageBoxIcon = MessageBoxIcon.Information
            Dim messaggiofondocassa as dialogresult = MessageBox.Show(messaggio, titolo, bottone, icona)
            If messaggiofondocassa = Windows.Forms.DialogResult.Yes Then
                Call Salvataggio() 'chiama una function per il salvataggio del file
                Form1.Show()
                Me.Close()
            End If
            If messaggiofondocassa = Windows.Forms.DialogResult.No Then
                TextBox1.Focus()
            End If
        Else
            Call Salvataggio()
            Form1.Show()
            Me.Close()
        End If
    End Sub

    Scusa ma se la risposta al DialogResult.No la metti nello stesso ciclo IF non è meglio? Non vorrei che alla pressione del No te lo chiude e quindi non ha un riferimento per quello che hai premuto.

     If messaggiofondocassa = Windows.Forms.DialogResult.Yes Then
                Call Salvataggio() 'chiama una function per il salvataggio del file
                Form1.Show()
                Me.Close()
                ElseIf messaggiofondocassa = Windows.Forms.DialogResult.No Then
                TextBox1.Focus()
            End If
  • Re: Vb net - Messagebox e showdialog

    Orione… non esistono “cicli if” e il codice che hai scritto è equivalente al suo, non cambia nulla.

    Attendiamo che l'op ci dica qualcosa sul resto del codice che ha nel form perché così funziona

    P.S. che bisogni c'è di quotare tutto il messaggio con tutto il codice?

  • Re: Vb net - Messagebox e showdialog

    Si boss, intendevo nell'IF ma ovviamente non è un ciclo anche perchè inizia e finisce :-) lo so che è come il suo ma pensavo, magari preme no, si chiude l' IF e avendo chiuso anche il DialogResult magai non lo vede… era un idea… sarà che io lo trovo più logico nello stesso IF ma sarà una cosa mi di praticità.

  • Re: Vb net - Messagebox e showdialog

    No… boss no…. :)

  • Re: Vb net - Messagebox e showdialog

    Scusate il ritardo nelle mie risposte e grazie per il vostro aiuto. Di seguito il codice del salvataggio. Come noterete dentro il form ci sono parecchie textbox, ma quelle di mio interesse sono soltanto la 1 e la 2.

    Il problema ora l'ho risolto in maniera un po' artigianale spostando il controllo in una function richiamata con il textbox1.lostfocus.

    Così facendo, tutto funziona, ma non riesco a spiegarmi cosa sbagliavo prima…

       'form2
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
          Dim valore1 As Double = 0
          Dim valore2 As Double = 0
          
          If TextBox1.Text <> "" Then
              valore1 = CDbl(TextBox1.Text)
          End If
          If TextBox2.Text <> "" Then
              valore2 = CDbl(Textbox2.text)
          End If
           
       If Math.Abs(valore1 - valore2) > 30 Then
           Dim messaggio As String = "Valori fortemente distanti" & vbCrLf & "Confermare?"
           Dim titolo As String = "ANOMALIA"
           Dim bottone As MessageBoxButtons = MessageBoxButtons.YesNo
           Dim icona As MessageBoxIcon = MessageBoxIcon.Information
           Dim messaggiovariazione as dialogresult = MessageBox.Show(messaggio, titolo, bottone, icona)
           If messaggiovariazione = Windows.Forms.DialogResult.Yes Then
               Call Salvataggio()
               Me.Close()
           End If
           If messaggiovariazione = Windows.Forms.DialogResult.No Then
               TextBox1.Focus()
           End If
       Else
           Call Salvataggio()
           Me.Close()
       End If
    End Sub
     
    Private Function Salvataggio()
       Me.Cursor = Cursors.WaitCursor
       Dim i As Integer
       Dim percorso As String = miopercorso
       Dim nomefile As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(percorso, False)
       For i = 1 To 27
           nomefile.WriteLine(Me.Controls("Textbox" & i).Text)
       Next
       nomefile.Close()
           
       Me.Cursor = Cursors.Default
       MsgBox("SALVATAGGIO EFFETTUATO", vbExclamation + vbOKOnly, "FINE")
    End Function
        
  • Re: Vb net - Messagebox e showdialog

    23/01/2024 - Cor29 ha scritto:


    Il problema ora l'ho risolto in maniera un po' artigianale spostando il controllo in una function richiamata con il textbox1.lostfocus.

    Così facendo, tutto funziona, ma non riesco a spiegarmi cosa sbagliavo prima

    Ovviamente devi farci vedere quello che hai cambiato e come era prima per avere una spiegazione!

    Se continui a nascondere il codice, non ha senso chiedere spiegazioni.

    Ripeto… il codice, quello mostrato, funziona regolarmente.

  • Re: Vb net - Messagebox e showdialog

    Hai ragione, ma continuo a lavorarci su per cercare l'errore e provare alternative.

    Ritorno al codice originale e ti metto a disposizione sia il codice per il button1 sul form1, sia il codice sul form2 (con 2 bottoni e 27 textbox)

    'form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Form2.ShowDialog()
        End Sub
    
    'form2
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Dispose()
        End Sub
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim valore1 As Double = 0
    	    Dim valore2 As Double = 0
    
        	If TextBox1.Text <> "" Then
                valore1 = CDbl(TextBox1.Text)
            End If
            If TextBox2.Text <> "" Then
                valore2 = CDbl(Textbox2.text)
            End If
    
            If Math.Abs(valore1 - valore2) > 30 Then
           	    Dim messaggio As String = "Valori fortemente distanti" & vbCrLf & "Confermare?"
     
           	    Dim titolo As String = "ANOMALIA"
        	    Dim bottone As MessageBoxButtons = MessageBoxButtons.YesNo
        	    Dim icona As MessageBoxIcon = MessageBoxIcon.Information
        	    Dim messaggiovariazione as dialogresult = MessageBox.Show(messaggio, titolo, bottone, icona)
        	    If messaggiovariazione = Windows.Forms.DialogResult.Yes Then
        	        Call Salvataggio()
        	        Me.Close()
        	    End If
        	    If messaggiovariazione = Windows.Forms.DialogResult.No Then
        	        TextBox1.Focus()
        	    End If
        	Else
        	    Call Salvataggio()
        	    Me.Close()
        	End If
        End Sub
    
        Private Function Salvataggio()
            Me.Cursor = Cursors.WaitCursor
            Dim i As Integer
            Dim percorso As String = percorso
            Dim nomefile As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(percorso, False)
            For i = 1 To 27
                nomefile.WriteLine(Me.Controls("Textbox" & i).Text)
            Next
            nomefile.Close()
            
            Me.Cursor = Cursors.Default
            MsgBox("SALVATAGGIO EFFETTUATO", vbExclamation + vbOKOnly, "FINE")
    	End Function

    Confermo che scritto così, quando clicco su NO, mi chiude il form2 e mi fa tornare al form1.

    ed incredibilmente, ho creato un nuovo progetto partendo da capo e se faccio copia incolla di questo codice funziona!! Quindi mi vien da pensare che ho involontariamente modificato qualche proprietà del form…

  • Re: Vb net - Messagebox e showdialog

    RISOLTO!!

    Involontariamente, ho modificato la proprietà “dialog result” del button2 in “cancel” e, dal momento che la proprietà Cancelbutton del form mi attiva il button1 che mi chiude il form, ecco spiegato!!!

    Grazie mille oregon!

Devi accedere o registrarti per scrivere nel forum
11 risposte