20/05/2024 - sihsandrea ha scritto:
Diciamo pure che se prevedi di mettere qualcosa, che sia a design time o a run time deve avere un nome…
A designtime, in WinForms, il nome va obbligatoriamente messo perché la libreria usa quell'identificatore per impostare le proprietà, generando codice all'interno del file *.Designer.cs.
A runtime, ossia creando il controllo tramite codice al di fuori del designer, il controllo NON richiede di avere un nome, e NON ha senso metterlo.
20/05/2024 - sihsandrea ha scritto:
Come fate a mettere un pulsante senza nome? O una label senza nome? Mah!
Se non voglio distinguere i controlli per nome, perché devo per forza attribuire un nome?
18/05/2024 - sihsandrea ha scritto:
Beh, delphi si inca…vola se un oggetto non ha un nome…
Non è vero: infatti ha perfettamente senso avere componenti senza nome, se non voglio associarvi eventi specifici o riferirmi a quel componente tramite codice. Questo in linea generale, anche quando si usa il designer.
Quando parliamo invece di controlli a runtime, a maggior ragione perché generando componenti tramite codice è un segnale evidente che sto producendo quei componenti a fronte di un'altra struttura dati che guida la creazione di quei componenti, e pertanto il loro riferimento può essere memorizzato e strutturato in modo diverso rispetto all'uso di un nome, che è sempre inefficiente.
20/05/2024 - sihsandrea ha scritto:
Il punto è: sr il nome lo mette l'utente (che so… ambarabaciccicocco) da programma, come fai ad assegnare alla label amarabaciccicocco il valore “prova”?
Il riferimento a quella Label è un riferimento a un oggetto, in fondo, quindi io posso recuperarlo, memorizzarlo e successivamente ottenerlo in milioni di altri modi che non sia passando attraverso la FindControl.
20/05/2024 - sihsandrea ha scritto:
Ora supponiamo che l'utente crea anche le label “trecivettesulcomo” e “passapaperino”, come faccio a distinguere il comando su tre label?
Il punto è questo: se i controlli vengono creati a runtime, ciò avviene per un motivo. Mettiamo di dover mostrare 1000 valori all'interno di un Form, farò un ciclo che per ogni valore crea una Label in cui mostrare il dato, magari in un layout che possa disporle affiancate o separandole con un ciclo che incrementa X e Y nella posizione. Non ha senso attribuire a questi controlli un nome: è sufficiente memorizzarle in fase di creazione all'interno di una lista indicizzata, oppure in una struttura che i riferimenti al controllo e al dato che deve essere mostrato. In poche parole, qualunque struttura che non dipenda da un nome e dalla ricerca dello stesso con un ciclo lineare è preferibile.
20/05/2024 - sihsandrea ha scritto:
ma potrebbero essere tre oggetti non necessariamente label…
Appunto, può trattarsi di qualunque oggetto, quindi da dove proverrebbe la regola che per identificare un componente o un controllo, quindi un oggetto, io devo per forza dargli un nome? Se lo creo a runtime, salvo il suo riferimento in un campo del Form (che poi è l'equivalente di dare un nome a designtime), ma posso scegliere qualunque altra struttura dati. Ovvio che se ne creo uno solo, il problema non si pone, ma per N componenti/controlli il senso di usare un nome diminuisce ancora di più.
Se in .NET non è stato replicato il concetto di “matrice di controlli” presente nel vecchio VB6, un motivo c'è…