Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    [VB.NET] Problema variabile nell'array su Windows Form

    Buonasera, sono giorni (ma anche di più) che non ne vado fuori, vorrei in un Windows Form inserire una variabile in un Array e non un valore fisso.
    Su Console davo un valore ad una variabile, poi in un secondo momento dichiaravo l'array con dentro quella variabile, e funzionava, esempio:
    codice:
    Dim dati As Integer
    Console.Write("Inserisci quanti dati vuoi inserire:" + vbTab)
    dati = Console.ReadLine - 1
    Console.WriteLine("Array composto da {0:N0} numeri.", dati + 1)
    Dim m(dati) As Integer
    For i = 0 To m.Length - 1 Step 1
    Console.Write("Inserisci numero:" + vbTab)
    m(i) = Console.ReadLine
    Next
    Quello che io voglio fare, inserendo in una TextBox un valore:
    codice:
    Public Sub ButtonOkArray_Click(sender As Object, e As EventArgs) Handles ButtonOkArray.Click
        array = TextBoxArray.Text - 1
    End Sub
    È usare quella variabile dentro un array utilizzato poi con molte Sub per varie cose.
    Mettendoci queste righe in cima:
    codice:
    Imports System.IO
    
    Public Class Mix
        Dim array, cont, cerca As Integer
        Dim numeri(array) As Integer
    Giustamente, non prende il valore che ho dato.
    Se lo inserisco però dentro ad una Sub, questa funziona:
    codice:
    Private Sub ButtonAggiungi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAggiungi.Click
        Dim numeri(array) As Integer
        If (cont < numeri.Length) Then
            numeri(cont) = TextBoxNumero.Text
            LabelElenco.Text = LabelElenco.Text + vbCrLf + Str(numeri(cont))
            cont = cont + 1
        Else
            MsgBox("Numeri esauriti!")
        End If
        TextBoxNumero.ResetText()
    End Sub
    Ma non funziona però nelle altre Sub, nemmeno se ridichiaro la variabile all'interno di queste.
    Qualcuno potrebbe aiutarmi su come fare?
    Grazie infinite a chi mi aiuterà!
    Ultima modifica di FioreFix; 02-06-2014 a 18:20

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Intanto non è una buona idea chiamare array la variabile per il numero di elementi. Al suo posto utilizza elems

    Quindi nella classe scrivi

    codice:
    Dim elems As Integer
    Dim numeri() As Integer
    e in BtnAggiungi

    codice:
    ReDim numeri(elems)

    P.S. Comunque avevi avuto una soluzione valida anche in

    http://www.visual-basic.it/Forum/tab...x#.U4yoE3J_umQ

    Scrivere in tanti forum non è un buon metodo e non è visto di buon occhio ...
    Ultima modifica di oregon; 02-06-2014 a 18:38
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Intanto non è una buona idea chiamare array la variabile per il numero di elementi. Al suo posto utilizza elems

    Quindi nella classe scrivi

    codice:
    Dim elems As Integer
    Dim numeri() As Integer
    e in BtnAggiungi

    codice:
    ReDim numeri(elems)

    P.S. Comunque avevi avuto una soluzione valida anche in

    http://www.visual-basic.it/Forum/tab...x#.U4yoE3J_umQ

    Scrivere in tanti forum non è un buon metodo e non è visto di buon occhio ...
    Capisco benissimo, e chiedo scusa per questo, ma probabilmente domani sarò interrogato e non posso perdermi in queste cose, per questo ho fatto un doppio post, cercando forse di spiegare meglio qui.
    Ho provato, il debug parte, che è una buona cosa, viene considerato giusto, ma solo nella prima sub:
    Questa va ok:
    codice:
    Private Sub ButtonAggiungi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAggiungi.Click
            ReDim numeri(elems)
            If (cont < numeri.Length) Then
                numeri(cont) = TextBoxNumero.Text
                LabelElenco.Text = LabelElenco.Text + vbCrLf + Str(numeri(cont))
                cont = cont + 1
            Else
                MsgBox("Numeri esauriti!")
            End If
            TextBoxNumero.ResetText()
        End Sub
    Mentre questa no e mi restituisce sempre 0:
    codice:
    Private Sub ButtonOrdina_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOrdina.Click
            LabelOrdinato.Text = "Elenco ordinato:"
            ReDim numeri(elems)
            For i = 0 To numeri.Length - 1
                For j = 0 To numeri.Length - 2
                    ordina(numeri(j), numeri(j + 1))
                Next
            Next
            For i = 0 To numeri.Length - 1
                LabelOrdinato.Text = LabelOrdinato.Text + vbCrLf + Str(numeri(i))
            Next
        End Sub
    Cosa sbaglio? Mi sembra di essere al punto di partenza...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La Redim la metti in una sola funzione, non in tutte. La metti in quella con cui devi dimensionare l'array subito dopo aver ottenuto il numero di elementi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    La Redim la metti in una sola funzione, non in tutte. La metti in quella con cui devi dimensionare l'array subito dopo aver ottenuto il numero di elementi.
    Ok, eliminata del tutto, infatti non è sottolineato nulla e il debug parte, però il problema rimane, mi escono tutti 0 nell'ordinamento.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Di cosa discutiamo ? Mi mostri tutto il codice aggiornato ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Di cosa discutiamo ? Mi mostri tutto il codice aggiornato ?
    Eccolo qui:
    codice:
    Imports System.IO
    
    Public Class Mix
        Dim elems As Integer
        Dim cont, cerca As Integer
        'Dim numeri(3) As Integer
        Dim numeri() As Integer
        'Sub Ordina
        Private Sub ordina(ByRef a As Integer, ByRef b As Integer)
            Dim t As Integer
            If a > b Then
                t = a
                a = b
                b = t
            End If
        End Sub
        'Function MCD
        Private Function mcd(ByVal numero As Integer, ByVal divisore As Integer) As Integer
            Dim resto As Single
            resto = numero Mod divisore
            If resto = 0 Then
                Return divisore
            Else
                Return mcd(divisore, resto)
            End If
        End Function
        'Aggiungi
        Private Sub ButtonAggiungi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAggiungi.Click
            ReDim numeri(elems)
            If (cont < numeri.Length) Then
                numeri(cont) = TextBoxNumero.Text
                LabelElenco.Text = LabelElenco.Text + vbCrLf + Str(numeri(cont))
                cont = cont + 1
            Else
                MsgBox("Numeri esauriti!")
            End If
            TextBoxNumero.ResetText()
        End Sub
        'Ordina
        Private Sub ButtonOrdina_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOrdina.Click
            LabelOrdinato.Text = "Elenco ordinato:"
            'ReDim numeri(elems)
            For i = 0 To numeri.Length - 1
                For j = 0 To numeri.Length - 2
                    ordina(numeri(j), numeri(j + 1))
                Next
            Next
            For i = 0 To numeri.Length - 1
                LabelOrdinato.Text = LabelOrdinato.Text + vbCrLf + Str(numeri(i))
            Next
        End Sub
        'Cerca
        Private Sub ButtonCerca_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCerca.Click
            Dim si As Boolean = False
            'ReDim numeri(elems)
            For i = 0 To numeri.Length - 1
                If numeri(i) = cerca Then
                    si = True
                End If
            Next
            If si = True Then
                MsgBox("Il" + Str(cerca) + " è presente!")
            Else
                MsgBox("Il" + Str(cerca) + " non c'è!")
            End If
        End Sub
        'MCD
        Private Sub ButtonMCD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonMCD.Click
            'ReDim numeri(elems)
            LabelMCD.Text = "MCD:" + Str(mcd(numeri(0), numeri(1)))
        End Sub
        'Salva
        Private Sub ButtonSalva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSalva.Click
            'ReDim numeri(elems)
            Try
                Dim StreamToWrite As StreamWriter
                Dim nomeFile As String
                nomeFile = "D:\Numeri.txt"
                StreamToWrite = New StreamWriter(nomeFile)
                For i = 0 To numeri.Length - 1
                    StreamToWrite.Write(Str(numeri(i)) + ";")
                Next
                StreamToWrite.Close()
                MsgBox("Il file è stato salvato in " + nomeFile)
            Catch ex As Exception
                MsgBox("Non è possibile salvare il file.", MsgBoxStyle.Critical)
            End Try
        End Sub
        'Leggi
        Private Sub ButtonLeggi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonLeggi.Click
            Try
                Dim StreamToRead As StreamReader
                Dim nomeFile As String
                Dim FileLetto As String
                Dim FileStringhe() As String
                nomeFile = "D:\Numeri.txt"
                StreamToRead = New StreamReader(nomeFile)
                FileLetto = StreamToRead.ReadToEnd
                FileStringhe = FileLetto.Split(";")
                LabelLeggi.Text = "File letto: " '+ vbCrLf + FileLetto
                For i = 0 To FileStringhe.Length - 1
                    LabelLeggi.Text = LabelLeggi.Text + vbNewLine + FileStringhe(i)
                Next
                StreamToRead.Close()
            Catch ex As Exception
                MsgBox("Non è possibile leggere il file.", MsgBoxStyle.Critical)
            End Try
        End Sub
        'Ok
        Private Sub ButtonOk_Click(sender As Object, e As EventArgs) Handles ButtonOk.Click
            cerca = TextBoxCerca.Text
        End Sub
        'Array
        Public Sub ButtonOkArray_Click(sender As Object, e As EventArgs) Handles ButtonOkArray.Click
            elems = TextBoxArray.Text - 1
            MsgBox("Array =" + Str(elems + 1))
        End Sub
    End Class
    E questo è il form:
    Form.PNG

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E cosa fai quando usi il codice ? In quale sequenza usi i button ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Quote Originariamente inviata da oregon Visualizza il messaggio
    E cosa fai quando usi il codice ? In quale sequenza usi i button ?
    Ok, allora, inserisco il numero nel quadratino rosso, e premo l'ok a fianco, in questo modo mi salvo l'array, dopodiché vado sotto e digito il primo numero, premo aggiungi, e torno a digitare nuovo numero, così via fino alla fine dell'array.
    Poi premo il pulsante Ordina che al posto di ordinarli mi mostra tutti 0, se premo il MCD mi da errore.
    Allego immagine per mostrare come viene fuori in esecuzione:
    Form1.jpg

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sposta la
    ReDim numeri(elems)

    e la metti subito dopo


    elems = TextBoxArray.Text - 1
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.