aprile 2004 Blog Posts
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...
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...
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)
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...
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...
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)
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...
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... :-(
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.
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...
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
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() ...
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()); }}
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..
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? :-)
Dopo le FAQ di C#, non potevano mancare le FAQ di VB.NET...
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!
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...
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...
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! :-)
Volete dare il vostro feedback su Visual Studio 2005 e il framework 2.0? fatelo usando questo sito
In esclusiva, la PM del .NET compact framework! :-)
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)
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...