Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117

    [VB.NET] - Ciclo for each su textbox

    Ciao! Sto diventando scema per sta cosa! xD

    Io con VB6 quando dovevo fare un ciclo per popolare tutte le textBox di un form facevo:

    codice:
    dim controllo as control
    for each controllo in mioForm.controls
    if typeof controllo is textbox then
    controllo.text=rsrecordset(controllo.name)
    next
    dove rsRecordset era una variabile record e dove i nomi delle textbox corrispondevano ai campi del record...

    ora con vb.net mi son arenata in sta cosa


    ho provato con:

    codice:
    Dim controllo As Control
    
            For Each controllo In Me.Controls
                If controllo.GetType = TextBox Then
                    controllo.Text = rsRecordset(controllo.Name)
                End If
            Next
    ma mi da errore:
    Errore 2 'TextBox' è un tipo e non può essere utilizzato come espressione.

    chi mi da una manina?

    grazie!!!

  2. #2
    codice:
                for (int i = 0; i < this.Controls.Count - 1; i++) 
                {
                    if (this.Controls[i] is TextBox) 
                    {
                        this.Controls[i].Text = "";
                    }
                }
    questo è c#

    vbnet dovrebbe essere molto simile

    prova ad usare IS

    If controllo.GetType = TextBox Then
    diventa

    If controllo IS TextBox Then
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  3. #3
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    se non ricordo male si usava type of.

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Prova così

    codice:
            
    Dim Controllo As Control
            For Each Controllo In Me.Controls
                If TypeOf Controllo Is TextBox Then
                    Controllo.Text = ""
                End If
            Next
    P.S. per xegallo

    Facendo come dici tu:
    codice:
    for (int i = 0; i < this.Controls.Count - 1; i++)
    si azzerano tutti i textbox meno il primo.

    Così invece si azzerano tutti:
    codice:
    for (int i = 0; i <= this.Controls.Count - 1; i++)
    Ciao

  5. #5
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149
    se l'errore è che non ti funziona il controllo se è una TextBox devi scriverlo così

    codice:
            Dim controllo As Control
    
            For Each controllo In Me.Controls
                If controllo.GetType = "System.Windows.Forms.TextBox" Then
                    ...
                End If
            Next
    fammi sapere ciao
    "Se in un primo momento
    l'idea non è assurda,
    allora non c'è nessuna speranza
    che si realizzi."
    - Albert Einstein -

  6. #6
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    ok! Con:

    codice:
    Dim Controllo As Control
            For Each Controllo In Me.Controls
                If TypeOf Controllo Is TextBox Then
                    Controllo.Text = ""
                End If
            Next
    Funziona!

    Il problema è che io vorrei popolare tutte le textbox con i dati del db...

    esempio la texbox chiamata "Nome" conterrà i dati del campo "Nome".

    a tal proposito ho scritto:

    codice:
     sql = "SELECT * FROM clienti WHERE ID=10"
            Dim cmd As New OleDbCommand(sql, Cn)
            Dim rsRecordset As OleDbDataReader = cmd.ExecuteReader
            Dim controllo As Control
    
            For Each controllo In Me.Controls
                If TypeOf controllo Is TextBox Then
                    controllo.Text = rsRecordset.Item(controllo.Name)
                End If
            Next
    sempre sottolineando che le textbox hanno lo stesso dome dei campi del recordset dovrebbe popolarli con i dati ma rimangono bianche xD

    Facendo il debug con f8 ho notato che non fa tutti i cicli per ogni controllo nel form ma solo pochi...è possibile che avendo inserito le textBox in dei frame di gruppo non le veda nel form bensì nel frame?

  7. #7

  8. #8
    Io farei cosi:

    sql = "SELECT * FROM clienti WHERE ID=10"
    Dim cmd As New OleDbCommand(sql, Cn)
    cmd.connection.open
    Dim rsRecordset As OleDbDataReader = cmd.ExecuteReader
    rsRecordset.read 'NBevi essere sicura che il record esista, altrimenti exception
    Dim controllo As Control

    For Each controllo In Me.Controls
    If TypeOf controllo Is TextBox Then
    controllo.Text = rsRecordset(controllo.Name)
    End If
    Next

    cmd.connection.close

    La parte più importante che hai saltato, secondo me, è la chiamata al metodo read del datareader. Questo metodo carica i valori del record successivo, ma essendo la prima volta che lo chiami... sarà il primo record...
    Nulla è impossibile

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.