Discussione chiusa
Pagina 1 di 3 123 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Salvare in file txt il contenuto di una textbox creata da codice

  1. #1
    AndreaReg non è in linea Novello
    Buonasera a tutti,
    premetto di conoscere in maniera molto basilare visual basic, non sono del mestiere ed è la prima volta che lo utilizzo. Fino ad ora ricercando online sono riuscito a trovare le soluzioni ai vari problemi sopraggiunti in corso d'opera, ma ora mi sono proprio bloccato

    Vi illustro il problema:
    al caricamento di un form, nel quale ho inserito un tabcontrol, con il seguente ciclo for-next aggiungo n. tabpage, in base al numero di righe di un dgv presenti in un altro form del programma e assegnando come nome alla tabpage "Sede operativa S" + il valore di una variabile d (in modo tale che i nomi delle tabpage risultino "Sede opertativa S2", "Sede opertativa S3" e così via...).

    'Crea la tabpage relativa alla sede inserita nella sezione luoghi di lavoro
    Dim c As Integer
    Dim d As Integer
    For c = 1 To Form3.DataGridView1.Rows.Count
    d = c + 1
    TabControl1.TabPages.Add("Sede Operativa S" + d.ToString)
    
    Fin qui tutto bene. Sempre all'interno dello stesso ciclo for-next faccio aggiungere delle label con relative textbox per la raccolta dei dati che andaranno salvati nel file .txt (ne riporto una sola per semplificare) e il button che si occuperà di eseguire il salvataggio:

    Dim MyLabel3 As Label
    MyLabel3 = New Label
    With MyLabel3
    .Location = New Point(23, 48)
    .Text = "Tipologia edilizia:"
    .Size = New Size(87, 13)
    End With
    TabControl1.TabPages(c).Controls.Add(MyLabel3)
    
    Dim MyTextBox1 As TextBox
    MyTextBox1 = New TextBox
    With MyTextBox1
    .Location = New Point(116, 45)
    .Size = New Size(246, 20)
    End With
    TabControl1.TabPages(c).Controls.Add(MyTextBox1)
    
    Dim MyButton1 As Button
    MyButton1 = New Button
    With MyButton1
    .Location = New Point(709, 123)
    .Size = New Size(102, 27)
    .Text = "Salva dati"
    End With
    AddHandler MyButton1.Click, AddressOf MyButton1_Click
    TabControl1.TabPages(c).Controls.Add(MyButton1)
    
    Su ogni tabpage vengono inseriti gli elementi correttamente. Ora viene l'inghippo, ovvero salvare il contenuto della Textbox creata al verificarsi dell'evento MyButton1.Click, il codice che ho inserito è il seguente:

    Private Sub MyButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    'Salva i dati della sede operativa di cui è aperta la scheda
    Dim x As Integer
    x = TabControl1.SelectedIndex + 1
    
    Dim salva As System.IO.StreamWriter
    salva = IO.File.CreateText("C:\Database DVR\Progetti\" + Form3.TextBox1.Text + "\Sede S" + x.ToString + ".txt")
    salva.WriteLine(MyTextBox1.Text)
    salva.Close()
    
    Cosa succede: mettiamo che le sedi operative siano 2 (S1 e S2), se clicco sul MyButton1 nella tabpage "S1" non succede nulla il file .txt rimane vuoto, diversamente se inserisco qualcosa nella MyTextBox1 dell'ultima tabpage creata (in questo caso quella relativa ad S2) e clicco su MyButton1 il tutto funziona e sul file "Sede S2" trovo il contenuto della textbox.

    Qualcuno può fornirmi qualche indicazione? Ringrazio in anticipo!

  2. #2
    Mi sembra strano che compili questa linea

    salva.WriteLine(MyTextBox1.Text)

    dato che la MyTextBox1 in realtà non esiste se non a runtime.

    E dato che ci sono molte textbox, fevi dare un nome ad ogni textbox (.Name) durante la creazione e ottenere un riferimento a quella giusta prima del salvataggio.
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    AndreaReg non è in linea Novello
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Mi sembra strano che compili questa linea

    salva.WriteLine(MyTextBox1.Text)

    dato che la MyTextBox1 in realtà non esiste se non a runtime.

    E dato che ci sono molte textbox, fevi dare un nome ad ogni textbox (.Name) durante la creazione e ottenere un riferimento a quella giusta prima del salvataggio.
    La linea la compila perché MyTextBox1 è stata dichiarata qui:
    Public Class Form8
        Dim MyTextBox1 As New TextBox
    
    Ho provato anche a modificare la proprietà .Name, in questo modo ad esempio:
    Dim MyTextBox1 As TextBox
    MyTextBox1 = New TextBox
    With MyTextBox1
    .Location = New Point(116, 45)
    .Size = New Size(246, 20)
    .Name = "MyTextBox1" + c.ToString
    End With
    TabControl1.TabPages(c).Controls.Add(MyTextBox1)
    
    Però poi non so poi come richiamarla al momento del salvataggio, mi spiego meglio. Mettiamo che c = 1 e che quindi la textbox venga rinominata da MyTextBox1 a MyTextBox11. Come faccio a dirgli poi di salvare il contenuto di MyTextBox11? Se scrivo direttamente "Salva.WriteLine(MyTextBox11)" mi da errore, e se la dichiaro sotto "Public Class Form 8" non funziona, il file .txt mi rimane vuoto.

  4. #4
    stilnovo78 non è in linea Novello
    Non voglio dire inesattezze perchè non ho vs a partata di mano x provare, ma istanziando la textbox1 nel ciclo for next in realtà non stai creando n rextbox, ma ogni volta sovrascrive sempre lo stesso riferimento. Quindi crei e al ciclo successivo distruggi e ricre la textbox1. Ecco perchè l'ultima ti funziona, in quanto è quella realmente valida.

  5. #5
    stilnovo78 non è in linea Novello
    In realtà le altre textbox non vengono distrutte perche mantenute in vita dal fatto che le hai aggiunte al contenutore padre tab, ma di sicuro non sono più accessibili attreverso textbox1 che mantiene solo il riferimento all'ultimo textbox creato. Dovresti puntare agli altri textbox ripescandoli nella collezione dei controlli della tabpage desiderata. Scrivo da telefonino e mi è difficile essere più preciso e dettagliato.

  6. #6
    Elimina la riga

    Dim MyTextBox1 As New TextBox
    
    Aggiungi il nome al controllo

    .Name = "MyTextBox1_" + c.ToString
    
    e nall'evento Click qualcosa del genere


    Dim txt() As Control
    txt = TabControl1.TabPages(x).Controls.Find("MyTextBox1_ " + x.ToString, False)
    MessageBox.Show(txt(0).Text)


    Fai attenzione al valore di x perché potrebbe essere + o - 1 a seconda del valore di indice utilizzato per le tabpages
    Ultima modifica di AntonioG; 24-06-2015 00:13 
    ℹ️ Leggi di più su AntonioG ...

  7. #7
    AndreaReg non è in linea Novello
    Quote Originariamente inviato da stilnovo78 Visualizza il messaggio
    In realtà le altre textbox non vengono distrutte perche mantenute in vita dal fatto che le hai aggiunte al contenutore padre tab, ma di sicuro non sono più accessibili attreverso textbox1 che mantiene solo il riferimento all'ultimo textbox creato. Dovresti puntare agli altri textbox ripescandoli nella collezione dei controlli della tabpage desiderata. Scrivo da telefonino e mi è difficile essere più preciso e dettagliato.
    Si il tuo ragionamento credo sia corretto... ho capito perfettamente il discorso delle textbox che si "distruggono".

  8. #8
    Quote Originariamente inviato da AndreaReg Visualizza il messaggio
    ho capito perfettamente ...
    ... ma non hai provato quello che ti ho suggerito di fare ...
    ℹ️ Leggi di più su AntonioG ...

  9. #9
    AndreaReg non è in linea Novello
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Elimina la riga

    Dim MyTextBox1 As New TextBox
    
    Se elimino questa parte mi va in errore e non parte, chiedendomi di dichiarare MyTextBox1_
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Aggiungi il nome al controllo

    .Name = "MyTextBox1_" + c.ToString
    
    e nall'evento Click qualcosa del genere


    Dim txt() As Control
    txt = TabControl1.TabPages(x).Controls.Find("MyTextBox1_ " + x.ToString, False)
    MessageBox.Show(txt(0).Text)


    Fai attenzione al valore di x perché potrebbe essere + o - 1 a seconda del valore di indice utilizzato per le tabpages

    P.S. Metto in grassetto ed elimino i tag CODE perché nella linea con l'underscore la formattazione combina casino ...
    Allora:
    • se metto x + 1 mi dice che l'indice "3" non restituisce unn valore valido
    • se metto x o x - 1 mi dice che l'indice va al di fuori della matrice

    Ho fatto una prova mettendo un ciclo if.

    If c = 1 Then
                    MyTextBox11 = New TextBox
                    With MyTextBox11
                        .Location = New Point(116, 45)
                        .Size = New Size(246, 20)
                    End With
                    TabControl1.TabPages(c).Controls.Add(MyTextBox11)
                ElseIf c = 2 Then
                    MyTextBox12 = New TextBox
                    With MyTextBox12
                        .Location = New Point(116, 45)
                        .Size = New Size(246, 20)
                    End With
                    TabControl1.TabPages(c).Controls.Add(MyTextBox12)
                ElseIf c = 3 Then
                    MyTextBox13 = New TextBox
                    With MyTextBox13
                        .Location = New Point(116, 45)
                        .Size = New Size(246, 20)
                    End With
                    TabControl1.TabPages(c).Controls.Add(MyTextBox13)
                End If
    
    stessa cosa per il MyButton1 e il tutto funziona... però in questo modo sono molto limitato (al n° totale di cicli if che "copio-incollo").

  10. #10
    Intanto non si parla di "cicli if" ... ma a parte questo, non serve tutto quel codice ...

    Probabilmente non hai fatto correttamente quello che ti avevo indicato ... controlla meglio.

    Se non ci riesci ancora, proponi *tutto* il codice che hai modificato (oppure facci scaricare il progetto ...).
    ℹ️ Leggi di più su AntonioG ...

Discussione chiusa
Pagina 1 di 3 123 ultimoultimo

Potrebbero interessarti anche ...

  1. Salvare il contenuto Webbrowser in un file Testo
    Da Lottowiz2007 nel forum Visual Basic .Net
    Risposte: 28
    Ultimo Post: 23-05-2017, 08:40
  2. Risposte: 3
    Ultimo Post: 17-08-2016, 08:54
  3. Access: Salvare contenuto textbox su tabella
    Da Simokeane86 nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 02-03-2011, 16:48
  4. Salvare il contenuto di una listbox in un file word
    Da kekko87_ nel forum Visual Basic 6
    Risposte: 4
    Ultimo Post: 05-09-2008, 15:20
  5. Risposte: 3
    Ultimo Post: 11-04-2007, 13:57