Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    170

    [VB.NET] Textbox relative a checkbox

    Ho una groupbox nella quale ho 10 checkbox che abilitano ognuna 2 textbox.
    Per sapere quali checkbox sono spuntate le ciclo tramite questo codice:
    Codice PHP:
            Dim ctrl As Control

            
    For Each ctrl In grp_prodotti.Controls
                
    If TypeOf ctrl Is CheckBox Then
                    Dim chk 
    As CheckBox
                    chk 
    DirectCast(ctrlCheckBox)
                    if 
    chk.Checked ... 
    La mia richiesta è questa: vorrei ciclare ogni checkbox e se questa è spuntata vorrei memorizzare i dati delle textbox relative, ma non so come collegarle, nel senso che non so come fare a dire che che checkbox1 è relativa a textbox1 e textbox11, checkbox2 a textbox2 e
    textbox22 etc.

    Come è possibile fare ciò?

    Grazie.

  2. #2
    Basta che manipoli il nome per ottenere l'indice e poi lo utilizzi cone grp_prodotti.Contros(<Nome>) per ottenere il riferimento alle altre textbox.

  3. #3
    codice:
    Imports System.Text
    Imports System.Windows.Forms
    
    Public Class Form1
    
        Dim valoreMemorizzato As New StringBuilder
        Dim dictionary As New Dictionary(Of CheckBox, TextBox)
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            dictionary.Add(Me.CheckBox1, Me.TextBox1)
            dictionary.Add(Me.CheckBox2, Me.TextBox1)
            dictionary.Add(Me.CheckBox3, Me.TextBox2)
            dictionary.Add(Me.CheckBox4, Me.TextBox2)
            dictionary.Add(Me.CheckBox5, Me.TextBox3)
            dictionary.Add(Me.CheckBox6, Me.TextBox3)
            dictionary.Add(Me.CheckBox7, Me.TextBox4)
            dictionary.Add(Me.CheckBox8, Me.TextBox4)
            dictionary.Add(Me.CheckBox9, Me.TextBox5)
            dictionary.Add(Me.CheckBox10, Me.TextBox5)
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim currentCheckBox As Control
    
            valoreMemorizzato.Remove(0, valoreMemorizzato.Length)
    
            For Each currentCheckBox In Me.Controls
                If currentCheckBox.GetType() Is GetType(CheckBox) Then
                    If CType(currentCheckBox, CheckBox).Checked Then
                        Dim valueToAdd As String
    
                        If valoreMemorizzato.Length > 0 Then
                            valueToAdd = "; " & dictionary(currentCheckBox).Text
                        Else
                            valueToAdd = dictionary(currentCheckBox).Text
                        End If
    
                        valoreMemorizzato.Append(valueToAdd)
                    End If
                End If
            Next
    
            Label1.Text = valoreMemorizzato.ToString()
        End Sub
    
    End Class
    Può andare?
    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    170
    Originariamente inviato da Il Totem
    Basta che manipoli il nome per ottenere l'indice e poi lo utilizzi cone grp_prodotti.Contros(<Nome>) per ottenere il riferimento alle altre textbox.
    Se mi potessi fare un esempio, perchè non mi è molto chiaro il tuo suggerimento.

    Intanto grazie per l'aiuto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    170
    Originariamente inviato da chipdb
    codice:
    Imports System.Text
    Imports System.Windows.Forms
    
    Public Class Form1
    
        Dim valoreMemorizzato As New StringBuilder
        Dim dictionary As New Dictionary(Of CheckBox, TextBox)
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            dictionary.Add(Me.CheckBox1, Me.TextBox1)
            dictionary.Add(Me.CheckBox2, Me.TextBox1)
            dictionary.Add(Me.CheckBox3, Me.TextBox2)
            dictionary.Add(Me.CheckBox4, Me.TextBox2)
            dictionary.Add(Me.CheckBox5, Me.TextBox3)
            dictionary.Add(Me.CheckBox6, Me.TextBox3)
            dictionary.Add(Me.CheckBox7, Me.TextBox4)
            dictionary.Add(Me.CheckBox8, Me.TextBox4)
            dictionary.Add(Me.CheckBox9, Me.TextBox5)
            dictionary.Add(Me.CheckBox10, Me.TextBox5)
        End Sub
    ...
    
    
    End Class
    Può andare?
    Purtroppo ci sono oggetti che non conosco, tipo dictionary e stringbuilder.
    Devo un attimino capire cosa fa questo codice, in modo che possa implementarlo al mio bisogno.
    Per es. non capisco il perchè dell'istruzione:
    Codice PHP:
    valoreMemorizzato.Remove(0valoreMemorizzato.Length
    e cosa si ottiene essattamente dal ciclo:
    Codice PHP:
    For Each currentCheckBox In Me.Controls... 
    Comunque grazie per il tempo dedicatomi, soprattutto per postare il codice!

  6. #6
    Lo stringbuilder è un creatore di stringa... E' un esempio, non so tu come voglia avere i nomi delle textbox... In pratica:

    codice:
    //qui lo crei
    Dim valoreMemorizzato As New StringBuilder
    
    ...
    
    //qui ne cancelli il contenuto, perchè altrimenti ti ritroveresti dei valori duplicati ogni volta che clicchi sul pulsante
    
    valoreMemorizzato.Remove(0, valoreMemorizzato.Length)
    
    ...
    
    //qui appendi alla stringa il testo della textbox se selezionata dalla checkbox
    valoreMemorizzato.Append(valueToAdd)
    L'altro è autoesplicativo...

    codice:
    //crea un oggetto di tipo Control (tutti gli oggetti che stanno in una form sono anche Control)
    Dim currentCheckBox As Control
    
    ...
    
    //per ognuno di essi
    For Each currentCheckBox In Me.Controls...
        //Se sono di tipo CheckBox...
        If currentCheckBox.GetType() Is GetType(CheckBox) Then
    
    ...
    Il dictionary invece è un oggetto che associa qualcosa ad un altra cosa... quindi, tu associ ad una CheckBox... una TextBox, proprio come avevi detto! Ecco il perchè dell'istruzione:

    codice:
    Dim dictionary As New Dictionary(Of CheckBox, TextBox)
    Vuoi un consiglio? Dai un'occhiata al codice in fase di debug, così capisci bene quello che fa e se lo fa come vuoi tu! Ciao!
    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    170
    Ti ringrazio per la spiegazione esaustiva!

    Nel pomeriggio vedo di provare il codice nella mia applicazione.
    Sei stato veramente di grande aiuto, se riuscissi a farlo funzionare sicuramente sarà un codice che utilizzerò spesso, visto che questa è un'esigenza che mi capita spesso.

    Grazie ancora.

  8. #8
    Di nulla! Buon lavoro!
    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  9. #9
    Secondo me usare un dictionary spreca troppo spazio quando sarebbe possibile ottenere un risultato simile senza usare altro che stringhe.
    codice:
    Imports System.Text
    Imports System.Windows.Forms
    
    Public Class Form1
    
        Dim valoreMemorizzato As New StringBuilder
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim currentCheckBox As Control
    
            valoreMemorizzato.Remove(0, valoreMemorizzato.Length)
    
            For Each currentCheckBox In Me.Controls
                If TypeOf currentCheckBox Is CheckBox Then
                    Dim Chb As CheckBox = DirectCast(currentCheckBox, CheckBox)
                    If Chb.Checked Then
                        Dim valueToAdd As String
    
                        If valoreMemorizzato.Length > 0 Then
                            valueToAdd = "; " & Me.Controls("TextBox" & Chb.Name.Remove(0, 7)).Text
                        Else
                            valueToAdd = Me.Controls("TextBox" & Chb.Name.Remove(0, 7)).Text
                        End If
    
                        valoreMemorizzato.Append(valueToAdd)
                    End If
                End If
            Next
    
            Label1.Text = valoreMemorizzato.ToString()
        End Sub
    End Class
    Dove Me puo' anche essere sostituito dal contenitore.

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    170
    Originariamente inviato da Il Totem
    Secondo me usare un dictionary spreca troppo spazio quando sarebbe possibile ottenere un risultato simile senza usare altro che stringhe.
    Un esempio di come agire secondo la tua idea?! :master:

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.