Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-06-2010, 14:56   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[C# 2.0] inserire stringhe in posizione {0}

Ciao a tutti

Ho una label così composta:

Codice:
X:{0}-Y:{0}
Durante l'esecuzione del programma, come posso inserire i valori di X e Y
evitando di usare un banale string.Insert ?

Grazie a tutti

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 17:09   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Ma almeno fosse
X:{0}-Y:{1}

potresti "sostituire" {0} con quello che vuoi li', e poi {1} con quello che vuoi la'...
Con varie soluzioni, dalla piu' elegante e veloce a quella piu' lenta e lunga.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 17:35   #3
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Ma almeno fosse
X:{0}-Y:{1}

potresti "sostituire" {0} con quello che vuoi li', e poi {1} con quello che vuoi la'...
Con varie soluzioni, dalla piu' elegante e veloce a quella piu' lenta e lunga.
Ciao

Beh, penso che essendo una label, almeno il testo di base io possa cambiarlo senza far arrabbiare nessuno.

La strada più lenta e lunga credo di averla percorsa perciò mi è stato chiesto di non utilizzare un metodo string.Insert()

Specifico un pò più di dettagli:

la label è un oggetto di tipo StatusStripLabel che, ovviamente, fa parte di un oggetto StatusStrip.

Sul form è presente una griglia, e ho il compito di tracciare le coordinate relative a riga - colonna al passaggio del mouse sulla griglia.

Al momento la soluzione che ho implementato è questa:

Codice:
int nRow = 0;
int nCol = 0;

private void kGrid_MouseMove(object sender, MouseEventArgs e)
{
    DataGridView.HitTestInfo hti = kGrid.HitTest(e.X, e.Y);
    if(hti.RowIndex >= 0)
    {
       nRow = hti.RowIndex + 1;
       nCol = hti.ColumnIndex + 1;
       StringBuilder sb = new StringBuilder();
       sb.Append("X:");
       sb.Append(nRow.ToString());
       sb.Append(" - ");
       sb.Append("Y:");
       sb.Append(nCol.ToString());
       coordStatusLabel.Text = sb.ToString();
      }
}
}
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 17:45   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Allora direi:
Codice:
string.Format("X:{0}-Y:{1}", x, y);
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 18:00   #5
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Allora direi:
Codice:
string.Format("X:{0}-Y:{1}", x, y);
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 18:13   #6
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Ok

Grazie come sempre per il prezioso aiuto !!

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2010, 19:58   #7
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
così è un pò meglio e eviti quelle due variabili orrende che non servono a nessuno

Codice:
private void kGrid_MouseMove(object sender, MouseEventArgs e)
        {
            if (kGrid.HitTest(e.X, e.Y).RowIndex < 0) return;
            coordStatusLabel.Text = string.Format("X:{0} - Y:{1}", kGrid.HitTest(e.X, e.Y).RowIndex + 1,
                                                  kGrid.HitTest(e.X, e.Y).ColumnIndex + 1);
        }
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2010, 20:10   #8
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da sneeze Guarda i messaggi
così è un pò meglio e eviti quelle due variabili orrende che non servono a nessuno

Codice:
private void kGrid_MouseMove(object sender, MouseEventArgs e)
        {
            if (kGrid.HitTest(e.X, e.Y).RowIndex < 0) return;
            coordStatusLabel.Text = string.Format("X:{0} - Y:{1}", kGrid.HitTest(e.X, e.Y).RowIndex + 1,
                                                  kGrid.HitTest(e.X, e.Y).ColumnIndex + 1);
        }
Peccato che il resto del tuo codice sia peggiore... esegue il metodo HitTest 3 volte invece di 1.
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2010, 20:57   #9
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
vero, lo esegue 3 volte.
preferisco se posso risparmiarmi 2 variabili int ,una HitTestInfo e uno StringBuilder. cmq il concetto era evitare di dichiarare variabili inutili, se proprio ti da fastidio eseguiro 3 volte uno hittest puoi tradurla così

Codice:
private void kGrid_MouseMove(object sender, MouseEventArgs e)
        {
            var temp = kGrid.HitTest(e.X, e.Y);
            if (temp.RowIndex < 0) return;
            coordStatusLabel.Text = string.Format("X:{0} - Y:{1}", temp.RowIndex + 1,
                                                  temp.ColumnIndex + 1);
        }
e hai comunque risparmiato 2 int inutili :

int nRow = 0;
int nCol = 0;

uno stringBuilder:

StringBuilder sb;

e hai usato l' hitTest una volta sola.
Contento?
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 01:28   #10
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da sneeze Guarda i messaggi
cmq il concetto era evitare di dichiarare variabili inutili, se proprio ti da fastidio eseguiro 3 volte uno hittest puoi tradurla così
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 09:27   #11
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
se mi dici cosa non ti è chiaro te lo posso spiegare
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 13:17   #12
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da sneeze Guarda i messaggi
se mi dici cosa non ti è chiaro te lo posso spiegare
Non mi è chiaro secondo quale criterio la variabile sarebbe inutile, visto che uno degli usi principali delle variabili è proprio quello di salvare un valore da usare più volte.
nRow, nCol e sb sono senza dubbio inutili (in questo caso). Ma hti proprio no.
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 15:57   #13
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
Quote:
Originariamente inviato da lock cmpxchg8b %ebx Guarda i messaggi
Non mi è chiaro secondo quale criterio la variabile sarebbe inutile, visto che uno degli usi principali delle variabili è proprio quello di salvare un valore da usare più volte.
nRow, nCol e sb sono senza dubbio inutili (in questo caso). Ma hti proprio no.
Difatti hti è l'unica che ho riutilizzato anche io, anche se la mia si chiama temp.
Dipende poi dal metodo in gioco, spesso è più conveniente chiamare più volte um metodo anzichè dichiarare una variabile. Dipende.
Le altre inoltre sono assolutamente inutili, se uno non lo vede a colpo d'occhio vuol dire che non ha molta esperienza. Dichiarare variabili inutili è indice di scarsa programmazione, scarsa ottimizzazione del codice e scarsa leggibilità futura.
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 16:25   #14
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Secondo me bisogna trovare un giusto compromesso con la leggibilità. Togliendo tutte le variabili inutili si rischia di non far capire niente a chiunque altro legga il codice.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 16:44   #15
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Difatti hti è l'unica che ho riutilizzato anche io, anche se la mia si chiama temp.
Parlavo del tuo primo spezzone di codice.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Dipende poi dal metodo in gioco, spesso è più conveniente chiamare più volte um metodo anzichè dichiarare una variabile. Dipende.
Sicuramente non in questo caso. Fammi un esempio.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Dichiarare variabili inutili è indice di scarsa programmazione, scarsa ottimizzazione del codice e scarsa leggibilità futura.
Molto peggio chiamare un metodo come HitTest per ben 3 volte soltanto per avere 1 riga di codice in meno. MOLTO peggio.
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 17:27   #16
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
Ripeto che dichiarare variabili inutili è indice di scarsa programmazione, scarsa ottimizzazione del codice e scarsa leggibilità futura.
Per quanto riguarda il mio codice ho tolto anche io le 3 chiamate al metodo. Ed ho comunque risparmiato la dichiarazione di 3 variabili inutili.
Inoltre ti posso assicurare che se tu avessi a che fare con liste di dati di una certa dimensione (parlo di liste Entity oltre le 100000 ad esempio) molto spesso, a discapito di un pò di tempo cpu perso, è molto meglio chiamare metodi tipo un orderby o un sort più volte pur di risparmiare l'orrore di copiare ogni volta un oggetto di quel tipo in un ulteriore variabile enorme.
Inoltre non dimentichiamoci che il metodo dal quale siamo partiri risponde alla chiamata di un evento di mouse move, questo vuol dire che viene chiamato una gran quantità di volte, e ogni volta si dovrebbe istanziare tutte quelle variabili inutili? per carità.
è vero che finiscono in garbage collection, ma è anche vero che la garbage del .net le pulisce ad ogni ciclo di garbage e non subito, quindi è un dispendio enorme di risorse per aggiornare una label. follia.
Non vedere che quelle 3 variabili in realtà ne generano a runtime quintali è un altro classico esempio di inesperienza.
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 17:32   #17
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Secondo me bisogna trovare un giusto compromesso con la leggibilità. Togliendo tutte le variabili inutili si rischia di non far capire niente a chiunque altro legga il codice.
Per questo è sempre buona norma commentare il codice, non c'è miglior modo per documentare quello che si scrive. Oltre ovviamente a cercare di rendere il codice leggibile, fidati che su progetti di una certa dimensione meno dichiarazioni si hanno e più si capisce. Altrimenti poi ti trovi ogni due secondi a cercare le variabili in giro per il sorgente. Cose del tipo "e questa variabile cos'è??? dove l'ha dichiarata??? aspetta che la cerco... a si eccola ok è un int, ma aspetta, sono sicuro che non la tocchi mai prima di arrivare dove stavo leggendo???? fammi scorrere bene il codice.... ok torno di là..... oh no e quest'altra???" ecc ecc ecc
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 17:36   #18
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Ripeto che dichiarare variabili inutili è indice di scarsa programmazione, scarsa ottimizzazione del codice e scarsa leggibilità futura.
Per quanto riguarda il mio codice ho tolto anche io le 3 chiamate al metodo. Ed ho comunque risparmiato la dichiarazione di 3 variabili inutili.
Inoltre ti posso assicurare che se tu avessi a che fare con liste di dati di una certa dimensione (parlo di liste Entity oltre le 100000 ad esempio) molto spesso, a discapito di un pò di tempo cpu perso, è molto meglio chiamare metodi tipo un orderby o un sort più volte pur di risparmiare l'orrore di copiare ogni volta un oggetto di quel tipo in un ulteriore variabile enorme.
Inoltre non dimentichiamoci che il metodo dal quale siamo partiri risponde alla chiamata di un evento di mouse move, questo vuol dire che viene chiamato una gran quantità di volte, e ogni volta si dovrebbe istanziare tutte quelle variabili inutili? per carità.
è vero che finiscono in garbage collection, ma è anche vero che la garbage del .net le pulisce ad ogni ciclo di garbage e non subito, quindi è un dispendio enorme di risorse per aggiornare una label. follia.
Non vedere che quelle 3 variabili in realtà ne generano a runtime quintali è un altro classico esempio di inesperienza.
Scusa riguardando l'originale ho visto che i due int sono dichiarati fuori dal metodo. magnifico..... questa sì che è rpogrammazione.... a quando le variabili static e i global per aggiornare una label??? eheheheheheh
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 17:42   #19
lock cmpxchg8b %ebx
Member
 
Iscritto dal: Apr 2010
Messaggi: 56
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Per quanto riguarda il mio codice ho tolto anche io le 3 chiamate al metodo.
Si, dopo che te l'ho fatto notare io.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Inoltre ti posso assicurare che se tu avessi a che fare con liste di dati di una certa dimensione (parlo di liste Entity oltre le 100000 ad esempio) molto spesso, a discapito di un pò di tempo cpu perso, è molto meglio chiamare metodi tipo un orderby o un sort più volte pur di risparmiare l'orrore di copiare ogni volta un oggetto di quel tipo in un ulteriore variabile enorme.
Non so perché tu stia spostando la discussione sulle liste ed i metodi di IEnumerable (o meglio, lo so, ma preferisco evitare), ma vorrei ricordarti che stavamo parlando di HitTest.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Inoltre non dimentichiamoci che il metodo dal quale siamo partiri risponde alla chiamata di un evento di mouse move, questo vuol dire che viene chiamato una gran quantità di volte, e ogni volta si dovrebbe istanziare tutte quelle variabili inutili? per carità.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
è vero che finiscono in garbage collection, ma è anche vero che la garbage del .net le pulisce ad ogni ciclo di garbage e non subito, quindi è un dispendio enorme di risorse per aggiornare una label. follia.
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Non vedere che quelle 3 variabili in realtà ne generano a runtime quintali è un altro classico esempio di inesperienza.
Hai qualche serio problema di comprensione?
Quote:
Originariamente inviato da lock cmpxchg8b %ebx Guarda i messaggi
nRow, nCol e sb sono senza dubbio inutili
lock cmpxchg8b %ebx è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2010, 18:26   #20
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
vabbhe dai chiudiamo la questione mi pare tu la voglia spostare in polemica e non mi interessa.
Cmq il mio era solo un esempio che mi avevi chiesto.

Ad ogni modo hai ragione su tutto basta che non ti scaldi per niente.
amici come prima
ciao
sneeze è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
SpaceX sta provando le piastrelle isolan...
Il National Reconnaissance Office statun...
Volkswagen avvia la produzione su CEA: c...
La crisi delle memorie non influenzer&ag...
MoM-z14 è la galassia scoperta da...
Da Sony nuovi display professionali dell...
Com'è fatta una delle e-bike pi&u...
iPhone 16 domina il 2025: ecco la classi...
Huawei a supporto delle startup: potenzi...
Iliad è il miglior operatore di l...
Le pompe di calore parlano italiano: Bon...
Moltbot non è solo un chatbot: ag...
Sinner e Alcaraz fermati dall'arbitro: i...
L'audio-video professionale arriva a MIR...
Musk fa i complimenti alla Cina: nel set...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:16.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v