aprile 2006 Blog Posts
Sto facendo alcuni esperimenti estendendo il class
designer di Visual Studio (se avrò successo ne parlerò in un prossimo post) e mi
son trovato nella necessità di inserire delle parentesi graffe all'interno di
una String.Format. Visto che alle volte la soluzione
può non essere banale, vi segnalo questa piccola FAQ di Brad Abrams che ho
scovato e che magari può essere utile.
Ciao
powered by IMHO 1.3
Oggi mi è arrivata questa mail:
Buongiorno a tutti, ho appena ricevuto
quest'email. Non cestinatela dateci un'occhiata, altrimenti potreste
ritrovarvi a pagare st'estate una bolletta in + quella di msn. Ho un
avvertimento per tutti quelli che non hanno voglia di buttare i propri
soldi dalla finestra. Nell'estate del 2006, vi faranno pagare per
utilizzare MSN ed il conto e-mail se non hai inviato questo messaggio
almeno a 18 persone sulle nostre liste di contatti. Non è uno scherzo e se
non mi credete andate...
I recently published an article about Crad's Actions on CodeProject. You can read it and send me feedbacks
following this link
powered by IMHO 1.3
Nei giorni scorsi ho ricevuto un feedback da un ceco
(nel senso che abita in Repubblica Ceca ) che aveva scovato la
mia piccola libreria per puro caso, dicendo che secondo lui avrei dovuto
metterla in un posto che le garantisse una maggiore visibiltà.
Io e il mio inglese maccheronico ci siam messi al lavoro e ho partorito un articoletto per CodeProject. Che dire,
ricevere i primi rating positivi è una soddisfazione grandissima! Ora spero
anche in qualche feedback in modo da poter evolvere il lavoro sin qui
svolto.
powered by IMHO 1.3
Chi sviluppa componenti con supporto al designer di
VisualStudio, sicuramente si è trovato ad utilizzare la proprietà DesignMode per verificare se il codice sia in esecuzione
nel contesto del designer o a runtime.
Bene, avevo un problema che mi ha portato ad indagare su come funzioni
internamente questa proprietà. Reflector alla
mano ho scoperto che, in un Component...
protected bool DesignMode{ get { ISite site1 = this.site; if (site1 != null) return site1.DesignMode; return false; }}
Ora... premesso che, se utilizziamo VisualStudio, a
design time il field site è un'istanza di
System.ComponentModel.Design.DesignerHost.Site e che quel
site1.DesignMode ritorna sempre true, c'è da fare
un'importante considerazione: durante l'esecuzione del costruttore del
Component, DesignMode è SEMPRE false, perché il corrispondente Site non
è...
Sicuramente tutti voi avrete notato che, nel template
utilizzato da VS2005 per il metodo main dei nostri progetti windows forms,
c'è una riga che recita
Application.SetCompatibleTextRenderingDefault(false);
Di cosa si tratta? L'ho scoperto ieri sera, cercando di
utilizzare anche in C# la classe WindowsFormsApplicationBase: è una nuova feature delle
classi che ereditano da Control del Fx 2.0 e consiste nella capacità di
utilizzare GDI piuttosto che GDI+ per il rendering del testo.
Come mai? Beh, GDI+ ha la peculiarità di avere API estremamente semplici da
utilizzare, ma il buon vecchio GDI offre parecchi vantaggi, per esempio:
Il look dell'applicazione è più consistente con le varie...
La piccola libreria open-source che sto realizzando si è
appena evoluta: grazie al tempo libero che ho avuto durante queste vacanze, sono
riuscito (in ritardo rispetto a quanto avevo previsto, purtroppo) a rilasciare
la versione 1.1 delle Crad's Actions.
Le novità rispetto alla release precedente sono parecchie: intanto un
sensibile refactoring del codice (come?!?! così presto?!? ), che ora è sensibilmente più ordinato e
comprensibile, poi l'aggiunta di nuove proprietà (quali shortcut keys,
tooltip, ecc.ecc...), infine la creazione di un corposo numero di Standard
Actions (es. Cut/Copy/Paste e parecchie altre), numero che è destinato ad
aumentare nei prossimi giorni
Per dimostrare il...
I've released a new version of Crad's Actions, in which all you saw in the previous one has been
really improved. I've also built a simple demo application. Obviously, you
are welcome to download both the library and the executable following
this link!
powered by IMHO 1.3
Oggi in Microsoft, dopo la sessione di Andrea,
chiacchieravo un po' con il simpaticissimo Janky ed è venuto
fuori un concetto che forse a molti sembrerà scontato, ma che spesso non lo è:
realizzare un buon Data Access Layer è qualcosa di *dannatamente*
complesso. Ma tanto, eh!!
E l'aggravante è che, purtroppo, questa caratteristica è difficilmente
identificabile da chi si avvicina per le prime volte alle metodologie di
sviluppo object-oriented e all'utilizzo dei patterns (e, OVVIAMENTE,
tale categoria comprende anche il sottoscritto): il primo pensiero è che basta
buttar giù due query, utilizzare i resultset per costruire entity piuttosto che
riempire...
In questi giorni sono stato parecchio preso con il mio
progettino delle Crad's Actions, ho corretto alcune cosine, riordinato un po' il
codice con un occhio all'espandibilità e implementato nuove funzionalità,
credo di metter su una versione nuova nella serata di mercoledì, Wi-Fi
dell'albergo permettendo
Già... albergo... eh sì! Questa sera, dopo una giornata in ufficio, si parte
per Milano. Ho preparato i bagagli, sistemato il portatile e scaricato gli
autovelox per il TomTom Credo di essere pronto per questi Community Days. Sinceramente
sono molto ansioso di conoscere qualcuno della...
Il titolo non sarà la massima espressione di linguaggio
tecnico, però è un problema che mi sono trovato ad affrontare nel weekend
sviluppando le mie
Actions
Ora, chi le ha scaricate e magari ha avuto modo di guardarne i sorgenti, sa
che si tratta di oggetti che ereditano da Component e che vanno sistemati su una
Windows Form. Mi sono trovato nella necessità di avere, nella mia ActionList, un
riferimento alla Form su cui essa giace....
Quando creiamo CustomControls, spesso
esponiamo proprietà che ritornano collection di items. Visual Studio è
abbastanza furbo da generare un Designer opportuno per creare le istanze degli
oggetti contenuti a design-time, tramite l'UITypeEditor CollectionEditor.
L'abbiamo usata migliaia di volte, si fa click su "Add"
e, detto T il tipo base di dati esposto dalla
collection, automaticamente una nuova istanza di T viene aggiunta ad essa.
Bene, ma se T fosse un tipo astratto? o se volessimo popolare tale
collection anche con tipi derivati da T? come farlo a design time?
Nulla di più semplice! Basta creare un custom UITypeEditor che derivi da CollectionEditor ed...
I wrote a simple tutorial on how to use Crad's Actions in Visual Studio. You can read it here.
Dato che mi è stato chiesto da qualcuno in mail, ho pubblicato un breve
tutorial (in inglese, spero non troppo maccheronico ) su come utilizzare le Actions per .NET 2.0.
Per leggerlo basta un click qui!
powered by IMHO 1.3
Chi ha lavorato in Delphi sa quanto siano comode le
actions! Di cosa si tratta? Allora...
Una form, solitamente, permette di compiere la stessa azione tramite più
elementi visuali; pensate ad esempio alla funzione "Grassetto" in un ipotetico editor RTF: magari
possiamo attivarla tramite menu, oppure potremmo utilizzare una comoda toolbar,
o ancora potremmo accedervi tramite un bel context menu. Tutti questi elementi condividono
parecchie proprietà: innanzitutto devono tutti rispondere al click del mouse allo stesso modo, e
questo si può già fare in .NET assegnando lo stesso event handler a tutti gli oggetti per i rispettivi eventi click. Purtoppo ciò...
Giuro che questa non la sapevo! Chissà se esistono altre
features nascoste di questo tipo!
powered by IMHO 1.3
Oggi, in un un momento di pausa, ho dato un'occhiata
ai referrers di questo blog. Ora, magari per tantissimi di voi sarà normale, ma
giuro che non mi aspettavo di vedere che qualcuno è arrivato su queste pagine
dopo aver cercato ITypedList o Custom Attributes su Google, e la cosa ha
suscitato in me parecchia emozione.
Un motivo in più per impegnarmi a scrivere post il più possibile
interessanti, sperando sempre che possano risultare utili a qualcuno, come tanti
altri post letti su UGI (e su altre dimore) lo sono stati per me.
powered by IMHO 1.3
I ValueTypes sono oggetti un po' particolari: sono allocati nello stack
piuttosto che nel managed-heap e le assegnazioni, se effettuate con reference
type, danno luogo a quel meccanismo che risponde al nome
di boxing/unboxing. Dicevo, regola aurea: *MAI* introdurre metodi
che cambiano lo stato interno di un value type, i risultati potrebbero essere
"strani"
Click sul titolo per continuare a leggere!