April 2004 Blog Posts

Whidbey Watcher #19: BackgroundWorkerThread

Eseguire metodi in threads secondari è ormai un pratica "comune" per chi sviluppa applicazioni Window Forms.A parte i soliti 'problemi' di sincronizzazione tipici delle applicazioni multithread la parte più 'ostica' è l'accesso ai controlli Windows Forms in maniera thread safe, operazione che ci costringe ad utilizzare Delegates,Invoke, InvokeRequired...Per renderci la vita più "facile" in Whidbey è stato aggiunto un controllo BackGroundWorkerThread il quale ha un metodo RunWorkerAsync che invocato prova la generazione (in un thread secondario) di un evento DoWork (al quale, volendo, possiamo anche passare dei parametri).All'interno di DoWork() è possibile invocare il metodo ReportProcess che a sua volta...

posted @ Friday, April 30, 2004 9:23 PM | Feedback (6)

Whidbey Watcher #18:MenuStrip, ToolStrip e StatusStrip

La CTP ha dei controlli molto interessanti rispetto alla versione distribuita a PDC, sopratutto perchè finalmente per avere un applicazione con look & feel alla Office 2003 non è più necessario appoggiarsi a controlli di terze parti.I controlli che permettono la 'magia' sono MenuStrip,ToolStrip,StatusStrip e ContextMenuStrip. 5 minuti di "paura" (i crash sono frequentissimi...) e il risultato è visibile sopra (notate anche il controllo MaskedTextbox...(!) )Le opzioni di configurazione non mancano (vedi sotto) e la flessibilità di gestione dei vari items va ben oltre quella offerte nei controlli di terze parti.Ci sono voluti parecchi anni ma direi che il team dei...

posted @ Wednesday, April 28, 2004 11:29 PM | Feedback (7)

Whidbey Watcher #17: Buttons and Flash

La form in figura è composta da 2 pulsanti che sfruttano le nuove proprietà di Whidbey BorderColor e BorderSize.I pulsanti hanno inoltre una proprietà MouseOverBackColor che permette di far cambiare il colore del pulsante quando si passa sopra con il mouse.Il tutto vale se la proprietà FlatStyle del pulsante è impostata a Flat.Un dettaglio sulla classe Form: Adesso espone un metodo Flash() che permette di far lampeggiare sia la finestra che la toolbar a nostro comando (in pratica un wrapper della API FlashWindow)

posted @ Sunday, April 25, 2004 10:36 PM | Feedback (1)

Whidbey Watcher #16: Controllo WebBrowser

Finalmente per avere un webbrowser all'interno delle nostre applicazioni windows forms non è più necessario importare la shdocvw.dll, in Whidbey abbiamo il componente WebBrowser che wrappa la dll citata e grazie al quale creare un minibrowser è questione di pochi minuti.Tra le funzionalità interessanti: GoBack(), GoForward(),GoHome(),Navigate() e gli eventi DocumentCompleted(), ProgressChangedEvent(),FileDownLoad().Una volta che la pagina è stata scaricata è possibile scorrere l'intero documento HTML attraverso la proprietà Document.L'esempio sotto riportato l'ho scritto in circa 3 minuti (...e si vede) usando i nuovi controlli ToolStrip e StatusStrip di cui parlerò in un altro blog...  

posted @ Sunday, April 25, 2004 9:54 PM | Feedback (3)

Whidbey Watcher #15: Listview e Treeview improvements

Anche i controlli Listview e Treeview sono stati 'ribaltati' a dovere... :-)Entrambi espongono la proprietà BackgroundImage, la Listview offre ora la possibilità di inserire icone nei ColumnHeaders.Sia Listview che Treeview offrono ora la modalità OwnerDraw: La listview espone due eventi DrawItem e DrawSubItem, il treeview permette di decidere se gestire tutto (OwnerDrawAll) o il solo testo (OwnerDrawText)La listview oltre che essere virtualizzabile (Virtualmode=True) ha un interessante modalità ShowGroup che permette di raggruppare gli items a nostro piacere (vedi foto) e, finalmente, permette di associare un proprio tooltip ad ogni singolo listviewitem.Anche il treeview permette di avere un tooltip per ogni nodo...

posted @ Sunday, April 25, 2004 11:08 AM | Feedback (0)

Whidbey Watcher #14: Picturebox improvements...

Il controllo picturebox di Whidbey ha una feature interessante: La possibilità di caricare immagini in maniera Sincrona/Asincrona (Usando WaitForLoad) non solo da locare ma anche da URL. Quindi si può usare ImageLocation=http://www.miosito.com/mypic.jpgSi può specificare l'immagine da usare in caso di errore nel download (ErrorImage) come pure l'immagine da visualizzare durante il caricamento (InitialImage)

posted @ Thursday, April 22, 2004 2:28 PM | Feedback (0)

Attenzione a questi metodi...

Brad Abrams segnala una serie di funzioni del CLR 1.0/1.1 che verranno marcate come obsolete nella versione 2.0, questo significa che saranno ancora presenti ma l'uso verrà sconsigliato, se state pensando di usarne qualcuno forse è il caso di cambiare idea...  

posted @ Thursday, April 22, 2004 2:26 PM | Feedback (0)

Whidbey Watcher #13: Autocomplete

I controlli Textbox e Combobox di Whidbey espongono la feature di autocompletamento. E' possibile decidere sia la modalità di autocomplete (Suggest,Append, SuggestAppend) e l'origine dei dati per la ricerca (FileSystem,AllUri,CustomSource...) se impostate CustomSource la ricerca avverrà all'interno di una lista descritta dalla proprietà AutoCompleteSource.Per la combobox esiste anche la possibilità di cercare all'interno della lista degli items disponibili (AutoCompleteSource=ListItems) peccato che nella CTP non funzioni... :-(

posted @ Thursday, April 22, 2004 11:27 AM | Feedback (0)

PInvoke.net

Per tutti i PInvokers un sito interessante creato da Adam Nathan dedicato a Pinvoke, essendo un Wiki ognuno puo' contribuire con le proprie APIs preferite.

posted @ Tuesday, April 20, 2004 1:54 PM | Feedback (0)

Whidbey Watcher #12:Controls.Item(...)

Per i nostalgici dei controls arrays un gradito ritorno, la collezione Controls espone:Controls.Items("ControlName")Esempio:Volete recuperare le 3 Textbox (TextBox1,TextBox2,TextBox3) presenti nel vostro form? ecco il codice For i As Int32 = 1 To 3  Dim txt As TextBox = TryCast(Controls.Item("TextBox" + i.ToString()), TextBox)  If (txt IsNot Nothing) Then txt.Text = "Hello" + i.ToString()NextGiusto per provare, ho utilizzato TryCast (l'equivalente di 'as' di C#...) e l' "utilissimo" IsNot (come abbiamo potuto farne a meno fin'ora?...)La novità interessante è che anche VB supporta la gestione degli eventi da designer come C# quindi mappare eventi comuni sulla stessa procedura è ora molto più semplice.Anche la gestione...

posted @ Monday, April 19, 2004 11:11 PM | Feedback (0)

Whidbey Watcher #11: Edit and Continue al 50%

Avevo già sentito questo 'rumor' ma ora c'è la conferma ufficiale: VB avrà Edit & Continue solo per le applicazioni Windows Forms, nulla cambia per chi sviluppa ASP.NET :-(.I motivi li trovate in questo blog

posted @ Monday, April 19, 2004 9:00 PM | Feedback (0)

Whidbey Watcher #11: Global Namespace

Qualcuno mi impedisce di chiamare un namespace System?, No, e allora posso tranquillamente scrivere questo: namespace Test{  namespace System  {     public class MyOwnClass     {       public void MyMethd()       {        System.Diagnostics.Debug.WriteLine("Hello");       }    }  }}Peccato che il codice non compila in quanto il compilatore utilizza il mio namespace System che, ovviamente, non include il namespace Diagnostics.C#2.0 include la keyword global per indicare che la ricerca di un determinato namespace deve partire dalla root.Quindi possiamo modificare la riga incriminata con:global::System.Diagnostics.Debug.WriteLine("Hello");A dire il vero, la documentazione citava solo "::" ma la CTP funziona in questo modo...E per VB?... lo stesso! Namespace Test  Namespace System     Public Class MyOwnClass       Public Sub DoSomething()        ...

posted @ Sunday, April 18, 2004 7:38 PM | Feedback (0)

Whidbey Watcher #10: ParametrizedThreadStart

Quando si a a che fare con System.Threading.Thread la domanda ricorrente è: "Come faccio a passare dei parametri alla funzione invocata dal Thread?", la risposta è nota, però val la pena notare che nel framework 2.0 oltre al solito delegate ThreadStart è apparso un ParametrizedThreadStart che permette di passare al thread i parametri che ci servono. Int32[] values ={ 3, 4, 8 };ParameterizedThreadStart ps = new ParameterizedThreadStart(ts);Thread t = new Thread(ps);t.Start(values); private void ts(object o){ Int32[] values = (Int32[])o; foreach(Int32 i in values) {   System.Diagnostics.Debug.WriteLine(i.ToString()); }}  

posted @ Sunday, April 18, 2004 2:37 PM | Feedback (1)

Evitare costruttori statici

Brad Abrams nel suo blog segnala come sia preferibile 'evitare' l'uso di costruttori statici nelle classi, in pratica in presenza di un costruttore statico, ogni volta che accediamo ad un membro della classe il CLR deve verificare se il membro e' stato inizializzato e, in caso contrario, invocarlo..  

posted @ Sunday, April 18, 2004 1:46 PM | Feedback (1)

Tour negli uffici del Longhorn Development Center

Su Channel9 Chris Sells ha pubblicato un interessante video girato negli uffici Microsoft, se volete vedere "dove" nascono i prodotti che usiamo quotidianamente dategli un occhiata.Decisamente un ambiente rilassante, che sia per questo che le date continuano a shiftare? :-)  

posted @ Saturday, April 17, 2004 1:58 AM | Feedback (0)

VB.NET FAQ

Dopo le FAQ di C#, non potevano mancare le FAQ di VB.NET...

posted @ Friday, April 16, 2004 2:52 PM | Feedback (4)

Raffaele il consigliere

Come è possibile leggere dalla news di oggi, Raffaele è un nuovo consigliere nella board di UGIDotNET, beh, con tutti i consigli che da quotidianamente...Welcome Raf!

posted @ Friday, April 16, 2004 9:21 AM | Feedback (0)

Tab vs Enter in una Textbox

Il blog nasce da una domanda nel NG di VB.NET."Vorrei fare in modo che l'utente non debba premere Tab ma Enter per passare al campo successivo in una Textbox winform"Visto che la domanda ricorre frequentemente, val la pena di bloggarla.Aggiungete al vostro progetto uno Usercontrol, sostituite:Inherits System.Windows.Forms.ControlconInherits System.Windows.Forms.Textboxe poi aggiungete queste righe: Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean  If (keyData = Keys.Enter) Then   Return MyBase.ProcessDialogKey(Keys.Tab)  ElseIf (keyData = Keys.Tab) Then   Return True  Else   Return MyBase.ProcessDialogKey(keyData)  End If End Function Fatto questo, fate il build della solution e impostate un reference al vostro stesso exe (!) e utilizzate lo usercontrol che apparira nella Tab "My User Controls"Enjoy! ;-) Per la...

posted @ Thursday, April 15, 2004 10:13 PM | Feedback (4)

Whidbey Watcher #9: Item Renaming

In Whidbey ci sono alcune piccole features che renderanno felici gli sviluppatori .NET:-Aggiungete una textbox (textbox1) ad un form-Nell'evento Load scrivete textbox1.Text="Hello" (col ; se usate C# :-) )-Nella finestra delle proprietà rinominate textbox1 in txtNameMagicamente il codice si è trasformato in txtName.Text="Hello" :-)Lo stesso vale se modificate la proprietà Name o il nome del file .vb (o .cs) di un form.Come senz'altro saprete, Refactoring è una delle principali novità di C# ed effettivamente l'implementazione in Whidbey è notevole, alcune 'tracce' sono comunque presenti anche in VB.NET, infatti selezionando una property o un method e facendo right-click, nelle varie voci del popup menu...

posted @ Wednesday, April 14, 2004 11:58 PM | Feedback (1)

Workshop "Distributed"

Se avete a che fare con applicazioni distribuite e non avete partecipato al workshop UGIdotNET di oggi, beh..., avete perso una grande occasione.Andrea, Pierre e Raf hanno parlato di Webservice, Remoting e Indigo e, a quanto pare, la sessione finale di Q&A e' stata molto 'intensa'.Un impegno improvviso mi ha impedito di salutare qualche amico..., sorry, sara' per il prossimo workshop! :-)

posted @ Wednesday, April 14, 2004 10:46 PM | Feedback (0)

Dite la vostra su Visual Studio 2005

Volete dare il vostro feedback su Visual Studio 2005 e il framework 2.0? fatelo usando questo sito

posted @ Saturday, April 10, 2004 12:54 PM | Feedback (0)

Nuove teconologie...

In esclusiva, la PM del .NET compact framework! :-)

posted @ Wednesday, April 7, 2004 5:21 PM | Feedback (0)

Immagini da Seattle

Oggi giornata 'rilassante' dove abbiamo avuto modo di incontrare altri MVP provienienti da tutte le parti del mondo.Qui sotto trovate Robert Scoble (ex MVP e ora dipendente Microsoft) Indovinate un pò di cosa si occupa? E sotto due 'volti noti' che fanno gli 'Italiani' con Marcie Robillard (a.k.a. Datagrid girl)

posted @ Monday, April 5, 2004 6:58 AM | Feedback (1)

MVP Summit 2004

Come alcuni di voi sanno in questi giorni sono a Seattle per l'MVP Summit 2004 insieme ad altri MVP e tra questi Raffaele e Andrea. Ecco quello che è appeso ai muri di Seattle...

posted @ Sunday, April 4, 2004 8:22 AM | Feedback (3)