Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Spiegazione classe

    Scusate ma sul libro che sto studiando c'è una parte che no nriesco proprio a capire e riguarda la creazione di una classe.
    io vi posto il codice, se potete darmi una spiegazione ve ne sarei grato, altrimenti se poteste darmi qualche link dove capire quello che sta scritto di seguito:

    codice:
    Public Class clsProdotto
    Private pnomeProdotto as String
    
    Public sub new()
    
    End Sub
    
    Public Sub New(Byval nomeprodotto as string, byval idprodotto as ineteger)
    ' si assegna il valore alle proprietà IDprodotto e nomeprodotto
    pidprodotto = idprodotto
    pnomeprodotto = nomeprodotto
    End sub
    
    Property nomeprodotto() as string
    get
    return pnomeprodotto
    end get
    set(byval valore as string)
    pnomeprodotto = valore
    end set
    end property
    
    public overrides function tostring() as string
    return pnomeprodotto
    end function
    
    enc class
    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Il linguaggio! Cartellino giallo...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    mannaggia hai ragione.... mi dimentico sempre...
    è VB.NET

  4. #4

    Re: Spiegazione classe

    Originariamente inviato da zetaweb
    Scusate ma sul libro che sto studiando c'è una parte che no nriesco proprio a capire e riguarda la creazione di una classe.
    io vi posto il codice, se potete darmi una spiegazione ve ne sarei grato, altrimenti se poteste darmi qualche link dove capire quello che sta scritto di seguito:

    codice:
    Public Class clsProdotto
    Private pnomeProdotto as String
    
    Public sub new()
    
    End Sub
    
    Public Sub New(Byval nomeprodotto as string, byval idprodotto as ineteger)
    ' si assegna il valore alle proprietà IDprodotto e nomeprodotto
    pidprodotto = idprodotto
    pnomeprodotto = nomeprodotto
    End sub
    
    Property nomeprodotto() as string
    get
    return pnomeprodotto
    end get
    set(byval valore as string)
    pnomeprodotto = valore
    end set
    end property
    
    public overrides function tostring() as string
    return pnomeprodotto
    end function
    
    enc class
    Grazie
    Qual è il punto che non ti è chiaro?

    Si tratta di una classe che prevede due diversi costruttori.
    Il primo è New() e si usa come in questo esempio:
    codice:
    Dim prod As clsProdotto
    prod = New clsProdotto
    Il secondo è New(nomeprodotto, idprodotto):
    codice:
    Dim prod As clsProdotto
    prod = New clsProdotto("fagioli", 145)
    Esiste poi la definizione di una proprietà chiamata NomeProdotto (e dovrebbe esistere anche un'altra chiamata IDProdotto):
    codice:
    prod.NomeProdotto = "fagioli"
    prod.IDProdotto = 145
    Infine un metodo per gestire la conversione dell'oggetto nel formato String:
    codice:
    Console.WriteLine(prod.ToString)
    Chi non cerca trova.

  5. #5
    penso mi manchino proprio le basi sul discorso delle classi.
    Potete indicarmi qualche link dove trovare qualche buona spiegazione su come costruirle ed utilizzarle?
    Grazie

  6. #6
    Dopo aver studiato l'utilizzo delle classi mi è sicuramente più chiaro il codice che ho scritto sopra, e sono riuscito ad usarle per le mie esigenze, però adesso ho un problema che non so come risolvere.
    Ho popolato un list box nel modo che vi posterò adesso, e vorrei che alla selezione di un elemento nel listbox si aggiornino alcuni campi testo con i dettagli di quell item selezionato.
    il codice che ho scritto è questo, la classe è un pò lunga ma è sempre la stessa:
    Questa è la classe:
    codice:
    Public Class bordi
        Private Vtipo As String
        Private VR As String
        Private VA As String
        Private VB As String
        Private Vfissaggio As String
    
        Property tipo() As String
            Get
                Return Vtipo
            End Get
            Set(ByVal Value As String)
                Vtipo = Value
            End Set
        End Property
    
        Property R() As String
            Get
                Return VR
            End Get
            Set(ByVal Value As String)
                VR = Value
            End Set
        End Property
    
        Property A() As String
            Get
                Return VA
            End Get
            Set(ByVal Value As String)
                VA = Value
            End Set
        End Property
    
        Property B() As String
            Get
                Return VB
            End Get
            Set(ByVal Value As String)
                VB = Value
            End Set
        End Property
    
        Property Fissaggio() As String
            Get
                Return Vfissaggio
            End Get
            Set(ByVal Value As String)
                Vfissaggio = Value
            End Set
        End Property
    
    End Class
    E questo è il codice del form
    codice:
    Private Sub CaricaBordi()
            Try
                Dim MyCmd As SqlClient.SqlCommand
                Dim MyDr As SqlClient.SqlDataReader
                Dim MySQL As String
                Dim MyProdotto As bordi
    
                myConn.Open()
    
                MySQL = "SELECT *FROM tab_bordiV"
                MyCmd = New SqlClient.SqlCommand(MySQL)
                MyCmd.Connection = myConn
    
                MyDr = MyCmd.ExecuteReader
    
                lstElenco.Items.Clear()
    
                Do While MyDr.Read
    
                    MyProdotto = New bordi
    
                    With MyDr
                        MyProdotto.tipo = .Item("tipo")
                        MyProdotto.R = .Item("a")
                        MyProdotto.A = .Item("a")
                        MyProdotto.B = .Item("b")
                        MyProdotto.Fissaggio = .Item("fissaggio")
    
    
                    End With
    
                    lstElenco.Items.Add(MyProdotto.tipo)
    
                Loop
                myConn.Close()
    
    
            Catch ex As Exception
                MessageBox.Show(ex.Message & " " & ex.StackTrace)
            End Try
    
        End Sub
    Avevo provato a fare una cosa di questo tipo
    codice:
                    txtTipo.Text = lstElenco.SelectedItem(MyProdotto.tipo)
    Ma mi da errore...
    sapete darmi qualche suggerimento per come posso risolvere questa cosa?
    Grazia tutti

  7. #7
    La classe Bordi è OK, mentre nella sub CaricaBordi c'è qualcosa che non quadra. A parte un errore di sintassi nella query (manca uno spazio tra * e FROM) mi chiedo come mai vai a creare per ogni record della tabella un oggetto Bordi quando poi questo oggetto non viene memorizzato da nessuna parte. Infatti la riga:
    codice:
    lstElenco.Items.Add(MyProdotto.tipo)
    semplicemente aggiunge la stringa MyProdotto.Tipo alla listbox, niente di più. Avresti potuto scrivere direttamente così:
    codice:
    Do While MyDr.Read
        lstElenco.Items.Add(MyDr.Item("tipo"))
    Loop
    Nell'evento click del listbox puoi scrivere:
    codice:
    txtTipo.Text = lstElenco.SelectedItem
    Ciao
    Chi non cerca trova.

  8. #8
    l'errore che hai posto tu l'ho capito subito dopo aver scritto questo messaggio, aggiustandolo così come portava il libro, solo che vino ad ora non avevo capito a cosa seviva:
    codice:
    Public Overrides Function ToString() As String
            Return Vtipo
        End Function
    E quando vado a popolare la listbox basta solo che scrivo
    codice:
    stElenco.Items.Add(MyProdotto)
    Così se ho capito bene mi visualizza solo il valore tipo, però ha in sè cmq tutti gli altri valori che homesso nella classe, giusto?

    Per quanto riguarda il selecteditem, ho provato così ma non funziona:
    codice:
    Private Sub lstElenco_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstElenco.SelectedIndexChanged
            Try
                Dim myprodotto As bordi
                myprodotto = New bordi
    
                txtTipo.Text = lstElenco.SelectedItem(myprodotto.tipo)
            Catch ex As Exception
                MessageBox.Show(ex.Message & " " & ex.StackTrace)
            End Try
    Ma non funziona perchè i valori sono assegnati nell'altra sub quando vado ad interrogare il DB.
    Quindi adesso il problema è come fare a mantenere i valori che ho assegnato all'oggetto myprodotto?
    Grazie

  9. #9
    Se la classe ha l'override alla funzione ToString, allora quando scrivi:
    codice:
    stElenco.Items.Add(MyProdotto)
    nella listbox verrà visualizzata la stringa impostata in ToString, mentre gli altri valori contenuti nella classe restano memorizzati all'interno del listbox. Per recuperare tali valori fai così:
    codice:
    Dim myprodotto As Bordi
    myprodotto = lstElenco.SelectedItem
    
    txtTipo.Text = myprodotto.tipo   'oppure qualsiasi altra proprietà della classe
    Chi non cerca trova.

  10. #10
    nella fretta hai scritto bordi invece di myprodotto
    cmq ho capito quello che dici!!!!

    Facendo così praticamente assegno all'oggetto myprodotto i valori che la classe associa all'item selezionato!!!

    Grazie mille!!!!

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.