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

    [VB.Net] - Usare stringhe per puntare a un oggetto!

    Ciao carissimi!
    Avrei un piccolo dubbio...

    E' possibile puntare a un oggetto avendo il suo nome salvato in una variabile?

    Mi spiego meglio....mettiamo che io ho 10 textbox che si chiamano:

    miaTxt1
    miaTxt2
    miaTxt3
    ...
    miaTxt10

    E volessi utilizzare un ciclo dove punto a una per una segnalandone il nome dalla stringa tipo:

    codice:
    for i=1 to 10
              dim miaTextBox as Textbox="miaTxt" & i
              miaTextBox.text="Ciao!"
    next
    Una cosa del genere. Ovviamente così non funziona perchè "miaTxt" & i è una stringa e VB.NET non vuole il nome dell'oggetto bensì l'oggetto vero e proprio! Ma se io il nome non lo ho come faccio a compormelo senza usare stringhe?

    Spero di essermi spiegata!

    Grazie a tutti coloro che risponderanno!

    :*

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ovviamente si, potresti usare il DirectCast e una funzione che trova il controllo che corrisponde al contenuto della variabile.

    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ops piccolo esempio grezzo grezzo:

    codice:
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            DirectCast(FindControl("TextBox1"), TextBox).Text = "Find it"
        End Sub
    
        Function FindControl(ByVal name As String) As Control
            For Each ctr As Control In Me.Controls
                If ctr.Name = name Then
                    Return ctr
                End If
            Next
        End Function
    Sbagliare è umano, perseverare è diabolico.

  4. #4
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Non riesco a farlo andare Pirex

    E' che non ho proprio capito come funziona il tutto e così a copia/incolla poi mi perdo xD

  5. #5
    Riprendendo il tuo esempio e il codice di Pirelli72, inserisci 2 o + textbox denominate TextBox1, 2, 3 ecc.. e scrivi questo nell'evento Load del form:
    codice:
            For Each ctr As Control In Me.Controls
                If ctr.Name.ToString.Substring(0, 7) = "TextBox" Then
                    ctr.Text = "CIAO"
                End If
            Next
    Capirai così cosa fa questo codice..


    Ciao

  6. #6
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Si si così l'ho capito meglio!

    A dire il vero mi si è accesa anche la lampadina per il codice di Pirelli! La funzione l'avevo capita non capivo a che servisse il directcast!

    Serve in sostanza a trattare l'oggetto restituito dalla funzione usando le proprietà della classe dell'oggetto stesso prima di sapere che tipo di oggetto è!

    (io metto listview e mi da tutte le proprietà della stessa anche da progettazione non ho il risultato della funzione)


  7. #7
    Originariamente inviato da Veronica80
    Si si così l'ho capito meglio!
    Lo sapevo..


    Ciao

  8. #8
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Piccola precisazione:
    Conviene fare una funzione ricorsiva che ti ritorna tutte le textbox e non usare me.controls per un semplice motivo che se hai un panello o groupbox che contiene queste textbox allora quel me.controls non ti funziona.
    I got the remedy

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Ovvio, sarebbe stato il passo successivo:

    codice:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            DirectCast(FindControl("TextBox1",Me), TextBox).Text = "Find it"
        End Sub
    
     Public Function FindControl(ByVal ControlName As String, ByVal CurrentControl As Control) As Control
            For Each ctr As Control In CurrentControl.Controls
                If ctr.Name = ControlName Then
                    Return ctr
                Else
                    ctr = FindControl(ControlName, ctr)
                    If Not ctr Is Nothing Then
                        Return ctr
                    End If
                End If
            Next ctr
            Return Nothing
        End Function
    Sbagliare è umano, perseverare è diabolico.

  10. #10
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    I got the remedy

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.