Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Ciclo su checkbox

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    4

    Ciclo su checkbox

    Ho una pagina aspx con 3 checkbox su cui voglio ciclare per recuperarne i nomi, ho fatto 3000 prove ma mi da sempre l'errore "Name" non è un membro di "System.Web.UI.Control".
    Come posso fare per ciclare?

    Pagina aspx:
    <form id="form1" runat="server">
    <div id = "DivProva">
    <asp:CheckBox ID="Chk1" runat="server" />
    <asp:CheckBox ID="Chk2" runat="server" />
    <asp:CheckBox ID="Chk3" runat="server" />
    <asp:Button ID="Button1" runat="server" Text="Button" /></div>
    </form>

    Pagina vb
    Dim sValore As String = ""
    For Each CTRL As Control In Me.Controls
    If TypeOf (CTRL) Is CheckBox Then
    sValore = CTRL.Name
    End If
    Next

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    che intendi con "nomi" ?
    Fare il ciclo su "Me.Controls" comunque spesso è sconveniente, fallo sulla Form1:

    codice:
    Dim sValore As String = String.Empty
    For Each CTRL As Control In Form1.Controls
      If TypeOf (CTRL) Is CheckBox Then
       sValore = DirectCast(CTRL, CheckBox).Text
      End If
    Next

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    4

    sValore rimane vuoto

    sValore rimane vuoto, ho fatto 2 textbox di controllo e in txt1 non mi scrive nulla mentre in txt2 mi scive 13 ????
    Io avrei bisogno di rilevare gli id delle checkbox selezionate come posso fare?
    Grazie 1000 per la risposta!

    <form id="form1" runat="server">
    <div id = "DivProva">
    <asp:CheckBox ID="Chk1" runat="server" />
    <asp:CheckBox ID="Chk2" runat="server" />
    <asp:CheckBox ID="Chk3" runat="server" />
    <asp:Button ID="Button1" runat="server" Text="Button" />




    <asp:TextBox ID="Txt1" runat="server"></asp:TextBox>
    <asp:TextBox ID="Txt2" runat="server"></asp:TextBox>
    </div>
    </form>


    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim sValore As String = String.Empty
    Dim iNum As Integer = 0

    For Each CTRL As Control In form1.Controls
    iNum = iNum + 1
    If TypeOf (CTRL) Is CheckBox Then
    sValore = DirectCast(CTRL, CheckBox).Text
    End If
    Next

    Txt1.Text = sValore
    Txt2.Text = iNum
    End Sub

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    codice:
        <form id="form1" runat="server">
            <div id = "DivProva">
                <asp:CheckBox ID="Chk1" runat="server" Text="Uno" />
                <asp:CheckBox ID="Chk2" runat="server" Text="Due" />
                <asp:CheckBox ID="Chk3" runat="server" Text="Tre" />
                <asp:Button ID="Button1" runat="server" Text="Button" />
                
    
                
    
                <asp:TextBox ID="Txt1" runat="server"></asp:TextBox>
            </div>
        </form>
    
    
    
    
    
    
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim IDs As String = String.Empty
    
            For Each CTRL As Control In form1.Controls
                If TypeOf (CTRL) Is CheckBox Then
                    If DirectCast(CTRL, CheckBox).Checked = True Then
                        IDs += DirectCast(CTRL, CheckBox).ID.ToString + " "
                    End If
                End If
            Next
    
            Txt1.Text = IDs.ToString
        End Sub
    Ti restituisce 13 perche' è il numero di controlli che trova nella form ! (labels, checkbox, etc)

    Inoltre, nel tuo codice scrivi "sValore" all'uscita dal ciclo, il che significa scrivere soltanto l'ultimo rilevato...

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    4

    Perfetto!!! Grazie!!!

    Sei stato fantastico!!!
    Direi che il mio tedioso problema è brillantemente risolto!
    Grazie acora.

    Se hai ancora un paio di minuti mi spieghi perchè devo fare
    If DirectCast(Ctrl, CheckBox).Checked = True Then
    e non posso scrivere
    If Ctrl.Checked = True Then

    Visto che ho scritto
    For Each Ctrl As Control In

    pensavo che Ctrl fosse un riferimento al controllo e che quindi bastava vedere se Ctrl era .Checked.

    Ciao.

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887

    Re: Perfetto!!! Grazie!!!

    Originariamente inviato da mamez
    Sei stato fantastico!!!
    Direi che il mio tedioso problema è brillantemente risolto!
    Grazie acora.

    Se hai ancora un paio di minuti mi spieghi perchè devo fare
    If DirectCast(Ctrl, CheckBox).Checked = True Then
    e non posso scrivere
    If Ctrl.Checked = True Then

    Visto che ho scritto
    For Each Ctrl As Control In

    pensavo che Ctrl fosse un riferimento al controllo e che quindi bastava vedere se Ctrl era .Checked.

    Ciao.

    Semplicemente perche' la classe Control è quella "madre" di tutti i controlli, quella generica.

    Quando fai: For each CTRL as Control in Form.Controls, stai ciclando nella collection dei Controls della form.

    Ma per ottenere le proprieta' ed i metodi della checkbox devi fare un cast (dopo aver appurato che il tipo è appunto, checkbox), perchè altrimenti hai fra le mani la sua forma "generica"...

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.