Creazione dinamica controlli

di il
31 risposte

31 Risposte - Pagina 2

  • Re: Creazione dinamica controlli

    Ciao dna_programmer
    controlla bene quello che hai scritto che sarà una svista, se hai problemi posta il codice che vediamo.
  • Re: Creazione dinamica controlli

    Ciao, si problema risolto, avevo fatto un pasticcio con l'incremento del contatore, si funziona da dio; Grazie mille ancora! Ciao!
  • Re: Creazione dinamica controlli

    Scusami ti posso fare una domanda di curiosità:

    Ma quando si fa questa dichiarazione in realtà cosa sarebbe?

    label.Location = New Point(10,10)

    cioè il metodo location si associa a un nuovo oggetto point? Non capisco
  • Re: Creazione dinamica controlli

    Ciao dna_programmer,
    si, assolutamente si. Come hai giustamente detto al metodo location (che è di tipo Point) si associa un nuovo oggetto Point.

    Questo perchè Point è una Struct e non una Class, e dato che Location viene ritornato per valore non avrebbe senso cambiarlo.

    Se non ti è chiara la differenza tra Class è Struct conviene parlarne.
  • Re: Creazione dinamica controlli

    Ciao, allora da quello che so io la classe è l'insieme degli attributi e metodi, e si usa nella OOP e una classe rappresenta un nuovo tipo di dato;
    Lo struct è sempre un nuovo tipo di dato ma è l'insieme solo dei dati, cioè nello struct non ci possono stare funzioni o procedure; questo è quello che so se è sbagliato ti prego di corregermi.

    Se point è uno struct ho due dubbi che non riesco a capire:

    1) Come si fa a passare parametri a uno struct?
    2)Se è uno struct perchè si usa "new", la new non si usa solo per gli oggetti(istanza di una classe) e per i puntatori?

    Di solito quando dichiaro uno struct lo faccio così:

    structure prova
    x as integer
    y as integer
    end structure

    public z as prova 'perché lo struct prova rappresenta un nuovo tipo di dato
  • Re: Creazione dinamica controlli

    Ciao dna_programmer,

    dna_programmer ha scritto:


    Ciao, allora da quello che so io la classe è l'insieme degli attributi e metodi, e si usa nella OOP e una classe rappresenta un nuovo tipo di dato;
    Lo struct è sempre un nuovo tipo di dato ma è l'insieme solo dei dati, cioè nello struct non ci possono stare funzioni o procedure; questo è quello che so se è sbagliato ti prego di corregermi.
    No, entrambe possono contenere dati e metodi, ecco un esempio di una struct con un metodo:
    
    Public Structure Persona
        Dim cognome As String
        Dim nome As String
        Dim eta As Integer
    
        Public Function NomeCompleto() As String
            Return cognome & " " & nome
        End Function
    End Structure
    
    Se è uno struct perchè si usa "new", la new non si usa solo per gli oggetti(istanza di una classe) e per i puntatori?
    Le strutture possono essere allocate con o senza il new, la differenza stà che se usi il new verranno inizializzati i vari campi (verranno messi a zero o a Nothing), se invece non lo usi i campi non sono inizializzati.
    
       Dim p As Persona
       Dim s As String = p.cognome
    
    questo è sbagliato è il compilatore ti avvisa dell' errore perchè il campo cognome non è stato inizializzato.
    
       Dim p As Persona = new Persona
       Dim s As String = p.cognome
    
    Qusto è corretto il campo persona è stato inizializzato (a Nothing) e il compilatore non protesta.

    Attenzione a non cadere in questo trabocchetto! Se controlli col debugger vedrai (probabilmente) che in entrambi i casi i vari campi valgono zero o nothing e non vedrai nessuna differenza. Il discorso è che quando usi la new i campi sono sicuramente messi a zero, quando non la usi non si sa! Il più delle volte saranno a zero perchè quella zona di memoria dove risiede la struct è tutta a zero ma si tratta di fortuna, potresti trovarti il campo 'eta' a un valore non nullo e poi non capire più niente, il bello sarà che ogni volta il problema sarà diverso e tipicamente quando entrerai col debugger non si presenterà, insomma un incubo.

    Il discorso sulle struct e sulla class non è terminato e ci sono altre cose importanti da dire, però prima di proseguire (se ti va) dimmi se fin qui è tutto chiaro.
  • Re: Creazione dinamica controlli

    Si , fino e qui mi sembra chiaro, in poche parole con le new per gli oggetti si richiama il costruttore(che inizializza i dati a valori predefiniti), quindi usando la new per gli struct è come se si richiamasse il 'costruttore dello struct' che inizializza tutto a nothing(NULL). Se è così fino e qui ho capito

    Una curiosità, ma se voglio richiamare la funziona dentro lo struct devo fare così:

    nomedellostruct.nome funzione
  • Re: Creazione dinamica controlli

    Si, i metodi delle struct li richiami allo stesso modo di quelli delle classi.

    Dimenticavo di dirti che con le classi il problema dell' inizializzazione non esiste, sono sempre inizializzate.

    L' altra differenza fondamentale tra classi e struct è che le prime sono sempre passate per riferimento, le seconde per valore. Ovvero per le classi si passa sempre un puntatore, invece la struttura viene sempre copiata completamente.

    Questo rende di fatto la struttura adatta solo a classi con pochi elementi (es Point, Vector, DateTime) in cui vi sono al massimo due o tre valori numerici. Quando si ha a che fare con classi con numerosi campi il tempo di copia può diventare inaccettabile, ma non è questo il problema principale.

    Supponiamo di avere una struttura 'Point' contenuta in una classe e che venga esposta come property (è l' esempio di label.Location = New Point(10,10))
    
       Dim p as Point = label.Point
    
    l' oggetto p è una copia del Point contenuto in label, per cui se lo cambi non alteri quello dentro la label.

    Se invece Point fosse una classe:
    
       Dim p as Point = label.Point
    
    l' oggetto p è un riferimento all' oggetto Point contenuto in label, in questo caso modificheresti l' oggetto contenuto nella label.
  • Re: Creazione dinamica controlli

    Quindi in pratica , nello specifico, point è uno struct contenuto nella classe label, ho capito bene?

    Poi un'altra cosa quando ad esempio allo struct point ci passo i valori, esempio: new point(10,20),
    sarebbe che lo struct è composto da due campi quindi 10 sarebbe il valore del primo campo, mentre 20 il valore del secondo campo. E' così ?

    Inoltre, nello specifico, cosa sarebbe una property?

    Scusa se ti faccio tutte queste domande, solo che è da poco che uso il .net
  • Re: Creazione dinamica controlli

    Ciao dna_programmer

    dna_programmer ha scritto:


    Scusa se ti faccio tutte queste domande, solo che è da poco che uso il .net
    Come ti capisco!!! Sono nelle stesse condizioni studiando l' objective-C

    dna_programmer ha scritto:


    Quindi in pratica , nello specifico, point è uno struct contenuto nella classe label, ho capito bene?
    si.

    dna_programmer ha scritto:


    Poi un'altra cosa quando ad esempio allo struct point ci passo i valori, esempio: new point(10,20),
    sarebbe che lo struct è composto da due campi quindi 10 sarebbe il valore del primo campo, mentre 20 il valore del secondo campo. E' così ?
    Si, perche sarà stato dichiarato un costruttore che accetta due parametri, una classe può avere molti costruttori con parametri differenti.

    dna_programmer ha scritto:


    Inoltre, nello specifico, cosa sarebbe una property?
    Uno dei capisaldi della programmazione ad oggetti si chiama Information hiding che prevede che i dati di una classe siano nascosti, cioè dichiarati privati, e vengono scagliati anatemi tremendi contro chi si permette di dichiarare dei campi pubblici, per chi li dichiara protetti è previsto il purgatorio. Devono sempre essere privati.

    Per accedere ai campi (che sono privati) di solito si forniscono una coppia di funzioni per leggerli e scriverli, ad esempio se hai i campi x e y dichiari le funzioni GetX, GetY, SetX, SetY, la qual cosa è una bella menata.

    Per agevolare questo lavoro in NetFramework sono state introdotte le property che è un sistema più agevole di fare la stessa cosa.
    
    Public Class MyPoint
        Private m_x As Double
        Private m_y As Double
    
        Public Property X() As Double
            Get
                'qui puoi decidere cosa restituire 
                Return m_x
            End Get
            Set(value As Double)
                m_x = value
                ' qui puoi scrivere altre azioni da compiere quando x viene assegnato
            End Set
        End Property
    End Class
    
    // esempio d' uso 
    
    Dim p as MyPoint = new MyPoint
    p.X = 10
    dim z as double = p.X
    
    È vero che perdi del tempo a scrivere la property, ma poi l' uso è comunque comodo,e inoltre il fatto che la lettura e l' assegnamento di un campo non avvenga direttamente ma venga mediato da delle funzioni offre dei vantaggi.

    Ad esempio potresti volere che quando assegni un valore alla X ne venga controllato il range, oppure l' oggetto automaticamenste si ridisegni sullo schermo, o altro ancora. Quando leggi potresti volere ad esempio che venga sempre arrotondato a due cifre decimali o che venga elaborato in altro modo gli esempi si sprecano.

    Oppure potresti non mettere la 'set' nella property ed ottenere delle property a sola lettura.
  • Re: Creazione dinamica controlli

    Non ho capito nel mio caso dove sta la property
  • Re: Creazione dinamica controlli

    dna_programmer ha scritto:


    Non ho capito nel mio caso dove sta la property
    Ovunque! In tutte le classi e in tutte le struct del NetFramework non c' è un solo campo esposto pubblicamente.
    
    label1.Location
    label1.Top
    label1.Font
    
    Bounds, Top, Font sono property.

    in:
    
    location.X
    location.Y
    
    X e Y sono due property.
  • Re: Creazione dinamica controlli

    Quindi in poche parole le property sono dei metodi che stanno nelle classi che permettono di usare all'esterno le variabili private della classe stessa.infine le property si implementano tramite i metodi get e set. Ho capito bene?
  • Re: Creazione dinamica controlli

    Perfettamente!
  • Re: Creazione dinamica controlli

    Quindi e un controsenso, cosa cambia se le dichiaro publiche e le posso modificare all'esterno oppure se le dichiaro private e faccio appositi metodi per modificarle all'esterno?
Devi accedere o registrarti per scrivere nel forum
31 risposte