Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

CS

There are 67 entries for the tag CS
I problemi dell'oggetto GZipStream

Il .NET Framework, a partire dalla versione 2.0, fornisce il namespace System.IO.Compression, al cui interno troviamo, tra le altre, la classe GZipStream, con cui è possibile comprimere e decomprimere file in formato ZIP. Facendo qualche prova, tuttavia, ho notato che essa non garantisce un elevato livello di compressione, per usare un eufemismo... Il dubbio mi è venuto quando ho compresso un file PDF di 4,48 MB, ottenendo uno ZIP di 4,44 MB; mi sembrava un po' strano, quindi ho provato ad utilizzare WinRAR, che ha prodotto un archivio di appena 1,46 MB. Allora ho scaricato SharpZipLib: comprimendo lo stesso file...

posted @ domenica 23 novembre 2008 22:55 | Feedback (4) | Filed Under [ C# ]

Le meraviglie dello StringBuilder

Le stringhe in .NET sono oggetti immutabili, quindi se si devono concatenare insieme un numero elevato si stringhe, usare l'operatore + è inefficiente, perché ogni volta verrebbe creata in memoria una nuova stringa. Per ovviare al problema, si deve utilizzare l'oggetto StringBuilder che, come si legge su MSDN, rappresenta una sequenza mutabile di caratteri, quindi ad esso è possibile aggiungere, rimuovere, inserire o sostituire caratteri senza la necessità di istanziare un nuovo oggetto in memoria. Questa è la favoletta che tutti noi conosciamo... Però quando oggi, facendo debug di codice scritto da altri, ho sostituito tutte le concatenazioni di stringhe con...

posted @ mercoledì 19 novembre 2008 19:34 | Feedback (5) | Filed Under [ C# VB .NET ASP .NET .NET 3.0 Orcas & .NET 3.5 ]

Recuperare la Specific Culture di una cultura

L'oggetto CultureInfo di .NET è utilizzato per indicare una cultura, che può essere composta da due parti: una cultura neutrale e una specifica. Ad esempio, nella cultura en-US, en rappresenta la cultura neutrale, mentre US è la cultura specifica. Quando si ha un oggetto di tipo CultureInfo, è possibile recuperare la cultura neutrale semplicemente accedendo alla sua proprietà TwoLetterISOLanguageName, mentre per la cultura specifica si deve ricorrere alla classe RegionInfo: RegionInfo ri = new RegionInfo("en-US"); string specificCulture = ri.TwoLetterISORegionName; Ovviamente lo stesso risultato si può ottenere anche manipolando la stringa en-US, ma questa soluzione garantisce che, se le regole di codifica...

posted @ lunedì 17 novembre 2008 19:03 | Feedback (0) | Filed Under [ C# ]

Attenzione all'inferenza dei tipi di .NET 3.5

Una delle novità maggiormente decantate di .NET 3.5 è l'inferenza dei tipi, ovvero la possibilità di determinare staticamente, a tempo di compilazione, il tipo di una variabile in base al suo contenuto. Tutto quello che serve, per utilizzarla, è indicare var come tipo di dato: quando incontra questa parola chiave, il compilatore sa che deve analizzare i dati memorizzati nella variabile per determinarne il tipo. Si tratta di una funzionalità molto comoda e che, quando si utilizza LINQ, spesso permette di evitare la creazione di classi specializzate per contenere i risultati delle interrogazioni, consentendo comunque di avere un accesso tipizzato...

posted @ sabato 15 novembre 2008 18:52 | Feedback (4) | Filed Under [ C# Orcas & .NET 3.5 ]

Introduzione a iTextSharp

In questi giorni sto guardando iTextSharp, una libreria gratuita per realizzare file PDF dalle proprie applicazioni .NET, per desktop e Web che siano. E' uno strumento potente, ricco di funzionalità, ma non molto facile da usare. A questo indirizzo ho trovato un semplice tutorial introduttivo che spiega come muovere i primi passi con questa libreria. Non è molto lungo, ma presenta comunque una serie di concetti importanti, tutti corredati da esempi di codice. Technorati Tag: .NET,Programming,C#,VB.NET,ASP .NET,Tools

posted @ giovedì 6 novembre 2008 18:20 | Feedback (0) | Filed Under [ C# VB .NET ASP .NET ]

Uno sguardo alle novità di .NET 4.0

Come molti di voi sanno, da qualche giorno è possibile scaricare dal sito Microsoft una macchina virtuale contenente la prima CTP di Visual Studio 2010 e del .NET Framework 4.0. In questo post, invece, è contenuta una breve panoramica delle principali novità che troveremo nella Base Class Library prossima ventura. Technorati Tag: .NET,Programming,Visual Studio,Updates,C#,VB .NET. Updates

posted @ mercoledì 5 novembre 2008 17:53 | Feedback (0) | Filed Under [ C# VB .NET ASP .NET Updates & Service Pack ]

Distanza di Levenshtein

La distanza di Levenshtein è un algoritmo che permette di calcolare la "distanza" tra due stringhe, restituendo un valore che indica quanto due stringhe sono simili (più il valore è basso, più le stringhe sono simili). Essa è utile per realizzare funzionalità del tipo Forse cercavi di Google. Questo post spiega come implementare l'algoritmo in una funzione CLR per SQL Server, che può essere richiamata, ad esempio, all'interno di una stored procedure. L'ho provato ieri e devo dire che dà risultati molto soddisfacenti, con tempi di elaborazione accettabili. Technorati Tags: .NET, Programming, C#, SQL Server

posted @ martedì 4 novembre 2008 20:29 | Feedback (5) | Filed Under [ C# SQL Server ]

Serializzazione JSON con ASP .NET

ASP .NET fornisce un oggetto con cui è possibile serializzare/deserializzare oggetti secondo lo standard JSON, il DataContractJsonSerlializer. Esso è contenuto nel namespace System.Runtime.Serialization.Json, ma per utilizzarlo si deve aggiungere al proprio progetto un riferimento all'assembly System.ServiceModel.Web.dll. Ogni classe o struttura che si vuole serializzare deve essere decorata con l'attributo DataContract; al suo interno, i membri che interessano devono avere l'attributo DataMember. Ad esempio:  [DataContract] public class ShoppingCart { [DataMember] public List<string> Articles { get; set; } [DataMember] public string UserName { get; set; } public ShoppingCart() ...

posted @ mercoledì 22 ottobre 2008 15:02 | Feedback (1) | Filed Under [ C# ASP .NET ]

Query dinamiche con LINQ

Utilizzando LINQ possiamo creare facilmente comandi per interrogare basi di dati SQL direttamente da codice, con tutti i vantaggi derivanti dalla type-safety e dal controllo dei parametri a tempo compilazione. In alcuni casi, tuttavia, ad esempio quando si realizza un sito Internet e, in particolare, il suo motore di ricerca interno, può capitare di dover eseguire interrogazioni su un database utilizzando una serie più o meno lunga di parametri impostati dall'utente (ad esempio, ricerca di prodotti solo in una certa categoria, con vincoli sul prezzo e sulla disponibilità, ecc.). Questa funzionalità può essere realizzata creando manualmente la query SQL, ovvero...

posted @ martedì 21 ottobre 2008 14:42 | Feedback (1) | Filed Under [ C# VB .NET ADO .NET & SQL ASP .NET SQL Server LINQ ]

Il mio nuovo articolo su ioProgrammo

Il buon Simone ha citato alcuni articoli pubblicati sul numero di Ottobre di ioProgrammo, relativi al motion detection e al riconoscimento delle immagini. Uno di questi l'ho scritto io: più precisamente, ho trattato la realizzazione di un sistema di videosorveglianza utilizzando C# e una comune webcam. Come sempre, se vi capita di leggerlo, mi farebbe piacere sapere cosa ne pensate Technorati Tag: .NET,Programming,C#

posted @ giovedì 18 settembre 2008 17:49 | Feedback (7) | Filed Under [ C# ]

Esempio di uso del namespace System.AddIn

Su MSDN Magazine di Luglio 2008 è stato pubblicato un articolo che spiega come utilizzare le classi del nuovo namespace System.AddIn per creare applicazioni Windows Forms estendibili. Technorati Tags: .NET, Programming, CS

posted @ giovedì 24 luglio 2008 20:12 | Feedback (0) | Filed Under [ C# Orcas & .NET 3.5 ]

Tutorial sulla programmazione con XNA

E' stato reso disponibile un tutorial video della durata di più di 2 ore che affronta diversi aspetti della programmazione di giochi 2D utilizzando il framework XNA. Gli argomenti affrontati sono numerosi: XNA Game Studio project creation Adding art assets to a project Displaying background art Sprites Simple collision techniques Scoring Font usage Keyboard and Gamepad input Basic C# programming within the XNA Framework Il...

posted @ lunedì 7 luglio 2008 17:58 | Feedback (1) | Filed Under [ C# Tutto & Oltre :-) ]

Pubblicato il mio articolo sul riconoscimento vocale

Sul numero di Luglio di ioProgrammo è stato pubblicato un mio articolo sul riconoscimento vocale con .NET 3.0. Il taglio è molto pratico, dopo una breve introduzione passo subito ad illustrare il funzionamento delle principali classi del namespace System.Speech. E' stata la mia prima esperienza su una rivista cartacea (finora ho collaborato solo con testate online, come HTML.it), ma spero che questo articolo sia l'inizio di una lunga serie Technorati Tags: .NET, Programming, C#

posted @ mercoledì 2 luglio 2008 15:08 | Feedback (2) | Filed Under [ C# Tutto & Oltre :-) .NET 3.0 ]

Quando utilizzare StringBuilder

Recentemente mi è stato chiesto quando conviene utilizzare uno StringBuilder piuttosto che concatenare le stringhe con il +. L'argomento è stato affrontato più volte, ma credo sia comunque utile riportare quando dice MSDN, in modo da chiarire la situazione: String objects are immutable in that they cannot be changed once created. Methods that act on strings actually return new string objects. Therefore, for performance reasons, large amounts of concatenation or other involved string manipulation should be performed with the StringBuilder class.   Technorati Tags: .NET, Programming, C#, VB .NET, ASP .NET

posted @ domenica 29 giugno 2008 15:09 | Feedback (4) | Filed Under [ C# VB .NET .NET Compact Framework ADO .NET & SQL ASP .NET .NET 3.0 ]

PInvoke Interop Assistant

PInvoke Interop Assistant è un tool per la generazione automatica di chiamate P/Invoke a partire da funzioni dell'API di Windows. Grazie ad esso, è possibile generare codice managed per C# e VB .NET. In origine presentato in un articolo di MSDN Magazine di Gennaio 2008, è stato recentemente pubblicato su CodePlex. Fonte: CLR Team Blog Technorati Tag: .NET,Programming,Tools,C#,VB .NET

posted @ martedì 24 giugno 2008 13:36 | Feedback (0) | Filed Under [ C# VB .NET ]

Una libreria per la compressione di file ZIP

Per la compressione di file ZIP in .NET, ho sempre utilizzato la famosa libreria SharpZipLib. In questi giorni, però, sono venuto a conoscenza di DotNetZip, di cui è stata recentemente rilasciata la versione 1.5. Si tratta di un progetto open-source pubblicato su CodePlex e rilasciato con licenza Microsoft Public License. Tra le funzionalità offerte, c'è anche la possibilità di creare archivi auto-estraenti e file ZIP che possono essere direttamente inviati all'oggetto Response.OutputStream, cosa che permette di generare dinamicamente archivi compressi scaricabili via Internet. Technorati Tags: .NET, Programming, C#, ASP .NET, VB .NET

posted @ sabato 21 giugno 2008 15:21 | Feedback (0) | Filed Under [ C# VB .NET ADO .NET & SQL ASP .NET .NET 3.0 Orcas & .NET 3.5 CodePlex ]

Bug nella libreria Argotic

Qualche giorno fa ho segnalato la libreria Argotic, per la gestione dei feed RSS. Durante il suo utilizzo, mi sono accorto che la proprietà Comments della classe Argotic.Syndication.RssItem, che dovrebbe contenere l'URL dei commenti ad un post, in realtà valeva sempre null, anche quando il tag comments era presente nel file XML. Sono così andato a vedere nei sorgenti della libreria, per isolare il problema, ed ho trovato l'inghippo. C'è un errore di ortografia nella stringa utilizzata per recuperare l'URL dei commenti; il file Argotic.Syndication.RssItem.cs (contenuto nel namespace Argotic.Core) contiene la seguente istruzione:  XPathNavigator commentsNavigator = source.SelectSingleNode("coments", manager); ovvero "coments" è...

posted @ giovedì 5 giugno 2008 10:37 | Feedback (4) | Filed Under [ C# CodePlex ]

Recuperare il chiamante di un metodo

In alcuni casi può essere necessario conoscere il nome del metodo che ha richiamato una certa routine. Ad esempio, per creare un meccanismo di logging in cui un ipotitetico metodo WriteLog scrive, tra le altre informazioni, anche il nome della funzione che lo ha invocato. Per fare questo, basta analizzare il contenuto dello Stack Trace:   1 StackTrace stackTrace = new StackTrace(); 2 StackFrame stackFrame = stackTrace.GetFrame(1); 3 MethodBase methodBase = stackFrame.GetMethod(); 4 string methodName = methodBase.Name; L'istruzione numero 2 recupera il primo stack frame, contenente il riferimento al metodo che ha richiamato la routine attualmente in esecuzione. Se, invece del numero 1, si utilizza, ad...

posted @ lunedì 2 giugno 2008 17:30 | Feedback (1) | Filed Under [ C# ]

Krypton Toolkit 2.8.5

Nuovo aggiornamento per questo insieme di controlli per Windows Forms. L'update in questione corregge alcuni bug ed aggiunge nuove combinazioni di colori ispirate a Windows Vista e Windows Media Player, che si affiancano alle palette già presenti in stile Office 2007. Per il download diretto, fate clic qui. Technorati Tag: Updates,.NET,Programming,C#,VB .NET,Tools

posted @ giovedì 29 maggio 2008 10:16 | Feedback (0) | Filed Under [ C# VB .NET .NET 3.0 Orcas & .NET 3.5 Updates & Service Pack ]

Libreria per il parsing degli RSS

Mi sembra che fosse stato già segnalato tempo fa sul muro, ma nell'incertezza lo riporto nuovamente, anche come appunto personale: all'indirizzo http://www.codeplex.com/Argotic è disponibile un framework molto ben fatto e in continuo sviluppo per la gestione di feed in formato RSS, Atom, OPML, APML, BlogML, RSD... e chi più ne ha più ne metta . La versione compilata della libreria è disponibile sia nella versione per .NET 2.0 sia per .NET 3.5. Technorati Tag: .NET,Programming,C#,VB .NET,ADO .NET,ASP .NET

posted @ lunedì 19 maggio 2008 18:49 | Feedback (3) | Filed Under [ C# VB .NET ADO .NET & SQL ASP .NET .NET 3.0 Orcas & .NET 3.5 ]

Rilasciata l'Enterprise Library 4.0

Giovedì scorso è stata rilasciata la versione 4.0 dell'Enteprise Library di Microsoft. Come sempre, MSDN è il sito di riferimento per la documentazione tecnica, mentre il download (insieme a video, esempi e molto altro ancora) è disponibile su CodePlex. Technorati Tag: .NET,Programming,Visual Studio,C#,VB .NET,ADO .NET,ASP .NET

posted @ lunedì 19 maggio 2008 16:30 | Feedback (0) | Filed Under [ C# VB .NET ADO .NET & SQL ASP .NET .NET 3.0 Orcas & .NET 3.5 ]

Provare le novità di Visual Studio 2008 e .NET 3.5 Service Pack 1

Il training kit per .NET 3.5 si arricchisce di nuovi labs che consentono di sperimentare le novità introdotte dal Service Pack 1. Per maggiori informazioni e per il link al download, di circa 37 MB, fare riferimento a questo post. Technorati Tag: .NET,Programming,Visual Studio,ASP .NET,C#,VB .NET,ADO .NET

posted @ mercoledì 14 maggio 2008 18:01 | Feedback (0) | Filed Under [ C# VB .NET ADO .NET & SQL ASP .NET Orcas & .NET 3.5 ]

Un editor visuale per LINQ-to-SQL

In questo post viene presentato VLINQ, ovvero Visual LINQ Query Builder. Si tratta di un add-in per Visual Studio 2008 che consente di creare query per LINQ-to-SQL in maniera completamente visuale. Allo stesso indirizzo è disponibile anche un breve tutorial che introduce il suo utilizzo. VLINQ è ospitato su MSDN Code Gallery: fare clic qui per accedere alla pagina del progetto. I download disponibili comprendo anche il codice sorgente, la documentazione e uno screencast che mostra l'utilizzo pratico di questa estensione. Technorati Tag: .NET,Programming,C#,VB .NET,ASP .NET,ADO .NET,LINQ,Visual Studio,Tools

posted @ lunedì 5 maggio 2008 12:19 | Feedback (0) | Filed Under [ C# VB .NET ADO .NET & SQL ASP .NET Orcas & .NET 3.5 LINQ ]

Logging delle applicazioni in .NET

Basta fare una piccola ricerca su Internet per trovare diversi framework di logging per .NET (vedi Log4NET, solo per citare il più famoso). Ci sono comunque situazioni in cui gli strumenti offerti da .NET sono più che sufficienti: basta utilizzare opportunamente la classe Trace e il file app.config per creare un semplice sistema di logging. Allo scopo, si deve innanzi tutto inserire una sezione come la seguente nel file di configurazione dell'applicazione: 1 <system.diagnostics> 2 <trace autoflush="true" indentsize="4"> 3 <listeners> 4 ...

posted @ sabato 26 aprile 2008 21:49 | Feedback (0) | Filed Under [ C# ]

Nuovo aggiornamento del Krypton Toolkit

E' stata rilasciata la nuova versione del Krypton Toolkit, la 2.8. Queste in breve le novità: New Controls/Components - KryptonDropButton - KryptonColorButton - KryptonListBox - KryptonCheckedListBox - KryptonCommand - KryptonGallery - 6 x KryptonContextMenu Elements Il download, abbastanza corposo (sono ben 22 MB), è disponibile qui. Technorati Tag: .NET,Programming,Updates,VB .NET,C#

posted @ martedì 22 aprile 2008 10:42 | Feedback (1) | Filed Under [ C# VB .NET .NET 3.0 Orcas & .NET 3.5 ]

Attenzione alla lingua del riconoscimento vocale

Qualche tempo fa avevo mostrato come realizzare un sistema di riconoscimento vocale basato su grammatiche utilizzando il .NET Framework 3.0. In quell'occasione ho dimenticato di fare una precisazione importante: per impostazione predefinita, quando si crea una grammatica essa utilizza sempre la cultura del sistema operativo; nel caso in cui essa sia  diversa da quella dei motori di riconoscimento installati (ad esempio Windows XP italiano con lo Speech API 5.1 SDK), nel momento in cui si esegue il metodo SpeechRecognitionEngine.LoadGrammar, si ottiene una InvalidOperationException perché La lingua della grammatica non corrisponde alla lingua del riconoscimento vocale. Per evitare questo problema, è...

posted @ martedì 22 aprile 2008 01:02 | Feedback (0) | Filed Under [ C# .NET 3.0 ]

Tutte le funzioni dell'API di Windows

Per quanto nel mondo .NET il ricorso alle API di Windows sia sempre più raro, ci sono situazioni in cui è ancora necessario utilizzarle. In casi del genere, è possibile fare riferimento a questa sezione di MSDN, in cui sono elencati le funzioni dell'API di Windows in ordine alfabetico, per categorie oppure divise per sistema operativo. Fonte: ascend slowly, breathing normally blog Technorati Tag: .NET,Programming,C#,VB .NET

posted @ lunedì 21 aprile 2008 11:44 | Feedback (0) | Filed Under [ C# VB .NET .NET 3.0 Orcas & .NET 3.5 ]

Un aggiornamento per Sandcastle

Giornata di annunci... A quanto pare una nuova versione di Sandcastle è dietro l'angolo e dovrebbe essere rilasciata entro la fine del mese, come annunciato qui. Questa release sarà utilizzata per generare la documentazione di Visual Studio 2008 SP1 che sarà pubblicata su MSDN. Technorati Tag: .NET,Visual Studio,Tools,Updates,C#,VB .NET,ASP .NET,ADO .NET

posted @ giovedì 17 aprile 2008 16:55 | Feedback (0) | Filed Under [ C# VB .NET .NET Compact Framework ADO .NET & SQL ASP .NET .NET 3.0 Orcas & .NET 3.5 Updates & Service Pack ]

Motion Detection in C#

Mentre stavo cercando una libreria .NET con funzionalità grafiche, sono incappato in un link ad un progetto di CodeProject chiamato Motion Detection Algorithms. Esso mostra come realizzare un'applicazione C# in grado di rilevare il movimento in uno stream continuo. Per un attimo, mi sono venute in mente alcune utility carine che si potrebbero realizzare... Magari ve ne parlerò in uno dei prossimi post . Technorati Tags: .NET, Programming, C#

posted @ lunedì 17 marzo 2008 16:06 | Feedback (1) | Filed Under [ C# ]

[70-549] Errata corrige #3, un altro copia/incolla di troppo?

Ancora il quick-check a pagina 212 del Self-Paced Training Kit per l'esame 70-549... La domanda 2 chiede quali modificatori possono essere utilizzati per specificare il tipo di ereditarietà supportato da una classe base. La risposta è completamente sbagliata. Innanzi tutto, si parla di NotOverridable/sealed e MustOverride/abstract. I modificatori C# sono corretti, mentre quelli che, secondo il testo, si possono applicare alla dichiarazione di una classe VB .NET, in realtà sono utilizzati per metodi e proprietà; nel caso di classi, invece, i modificatori corretti sono, rispettivamente, NotInheritable e MustInherit. Penso che l'errore sia dovuto al fatto che in C# si utilizzano sealed...

posted @ giovedì 13 marzo 2008 22:00 | Feedback (0) | Filed Under [ C# VB .NET Certificazioni ]

[70-549] Errata corrige #1

Ecco un errore del Self-Paced Training Kit per l'esame 70-549... Il quick-check a pagina 212 chiede, tra le altre cose, quali modificatori possono essere specificati su proprietà, metodi e classi per consentire l'overriding. Nella risposta sono correttamente elencati Overridable/virtual e Overrides/ovveride. Tuttavia, nel capitolo non si fa alcuna menzone di tali modificatori, e il quick-check dovrebbe essere un modo per verificare velocemente se gli argomenti trattati nella pagine precedenti sono stati compresi... Come si fa a comprendere qualcosa di cui non si parla? Technorati Tag: Certification,.NET,Programming,C#,VB .NET

posted @ domenica 9 marzo 2008 14:54 | Feedback (0) | Filed Under [ C# VB .NET Certificazioni ]

Dietro le quinte delle proprietà automatiche di Visual Studio 2008

Tempo fa avevo già parlato della sintassi abbreviata per la definizione delle proprietà in C# con Visual Studio 2008. Oggi ho provato ad utilizzare Reflector per vedere il codice che di fatto viene generato a tempo di compilazione quando si utilizza questa feature. Partendo dalla seguente classe:   public class TestClass { public int MyProperty { get; set; } } Quello che si ottiene è:   public class TestClass { // Fields [CompilerGenerated] private int <MyProperty>k__BackingField; // Properties public int MyProperty { ...

posted @ martedì 4 marzo 2008 11:40 | Feedback (0) | Filed Under [ C# Orcas & .NET 3.5 ]

SharpUpnp 1.0 rilasciato

Come promesso, pochi minuti fa ho rilasciato su CodePlex la versione 1.0 di SharpUpnp. Nella sezione Release potete trovare la libreria, la documentazione e tutti i sorgenti del progetto. Fino adesso ho ricevuto diversi feedback positivi, quindi mi piacerebbe provare a pubblicizzare maggiormente la libreria... Mi date qualche idea su come fare? Technorati Tags: .NET, Programming, C#, CodePlex

posted @ giovedì 7 febbraio 2008 00:14 | Feedback (10) | Filed Under [ C# CodePlex ]

Ridefinire i metodi statici

Questo è il titolo, volutamente provocatorio, di un post pubblicato sul blog di Kirill Osenkov. Le cose dette non sono niente di nuovo, ma è comunque utile avere a disposizione una piccola reference su questo argomento. Technorati Tags: .NET, Programming, C#

posted @ mercoledì 6 febbraio 2008 13:51 | Feedback (1) | Filed Under [ C# ]

A breve la release 1.0 di SharpUpnp

Finalmente ho trovato il tempo per terminare la versione 1.0 di SharpUpnp. Ancora qualche giorno per scrivere la documentazione e il rilascio è pronto! Stay tuned, miei cari 25 lettori... Technorati Tags: .NET, Programming, C#, CodePlex

posted @ martedì 5 febbraio 2008 18:35 | Feedback (2) | Filed Under [ C# CodePlex ]

MSDN Code Gallery

A questo indirizzo è possibile raggiungere la nuova MSDN Code Gallery, una grande raccolta di esempi di codice e documentazione tecnica dedicata a .NET, a cui chiunque può contribuire inviando nuove risorse. Lo stile e l'interfaccia grafica del portale ricalcano molto da vicino quelli di CodePlex. Technorati tags: .NET, Programming, C#, VB .NET, ASP .NET, ADO .NET, .NET Compact Framework, .NET Micro Framework, LINQ, Silverlight

posted @ giovedì 31 gennaio 2008 14:57 | Feedback (0) | Filed Under [ C# VB .NET .NET Compact Framework ADO .NET & SQL ASP .NET .NET 3.0 .NET Micro Framework Orcas & .NET 3.5 Silverlight ]

eBook su C# 3.0

In questo post sono disponibili i link per scaricare un eBook di 519 pagine che contiene tutte le specifiche di C# 3.0 e una "versione ridotta" di sole 30 pagine, dedicata esclusivamente alla novità di questa versione. Technorati tags: .NET, C#

posted @ lunedì 28 gennaio 2008 12:51 | Feedback (1) | Filed Under [ C# Orcas & .NET 3.5 ]

Un link per chi documenta il proprio codice in XML

Documentare le proprie class library utlizzando l'XML è un'attività tutt'altro che banale: sebbene Visual Studio proponga in automatico lo scheletro del commento di un metodo/proprietà, esistono numerosi tag XML che possono essere utilizzati per la scrittura di documentazione (ad esempio <exception>, <example>, <code>, <remarks>). In questo articolo di MSDN Magazine è presentato un breve riassunto dei principali tag XML disponibili per la scrittura della documentazione. Technorati Tag: Visual Studio,.NET,C#

posted @ lunedì 21 gennaio 2008 22:50 | Feedback (2) | Filed Under [ C# ]

Applicazioni Peer-to-Peer in .NET 3.5

Contrordine... Mi lascio un appunto qui, così l'anno nuovo so già a cosa dovrò lavorare . Mi sto riferendo ai nuovi oggetti forniti dal .NET Framework 3.5 per la gestione di applicazioni Peer-to-Peer: in particolare, PeerName, PeerNameRegistration e PeerNameResolver, contenuti nel namespace System.Net.PeerToPeer. Grazie ad essi, realizzare applicazioni Peer-to-Peer è di una semplicità sconcertante. Ad esempio, il seguente codice pubblica un nuovo peer: 1 // Creates a secured PeerName. 2 PeerName peerName = new PeerName("MyPeerNode", PeerNameType.Secured); 3 4 PeerNameRegistration pnReg = new PeerNameRegistration(peerName, 4567, Cloud.Global); 5 pnReg.UseAutoEndPointSelection = true; 6 pnReg.Comment = "up to 39 unicode char comment"; 7 pnReg.Data...

posted @ domenica 30 dicembre 2007 11:33 | Feedback (2) | Filed Under [ C# Orcas & .NET 3.5 ]

Effettuare il Join di due DataTable

Qualche giorno fa ho avuto la necessità di effettuare il join di due DataTable, risultato di interrogazioni su due database differenti, per produrre un unico DataTable da mostrare in un controllo DataGridView. Le due tabelle dovevano essere unite sulla base di un campo ID, secondo l'usuale relazione di chiave-chiave esterna. Mi sono così definito una procedura per eseguire l'operazione: private void Join(DataTable mainTable, string mainRowField, string parentRowField, DataRelation relation) { //Controlla se la tabella contiene la colonna in cui aggiungere i risultati del join. if (!mainTable.Columns.Contains(mainRowField)) mainTable.Columns.Add(mainRowField); ...

posted @ sabato 29 dicembre 2007 17:02 | Feedback (1) | Filed Under [ C# ADO .NET & SQL ]

Determinare quando è disponibile una connessione a Internet

Ormai sono lanciato nella realizzazione di classi di supporto per la gestione della rete. Dopo NetworkChange2, oggi è la volta di una classe che consente di sapere se il PC è collegato a Internet oppure no, nonché di ricevere notifiche se lo stato della connessione cambia: 1 using System; 2 using System.ComponentModel; 3 using System.Threading; 4 using System.Net; 5 6 namespace System.Net.NetworkInformation 7 { 8 public delegate void InternetAvailabilityChangedEventHandler(object sender, InternetAvailabilityEventArgs e); 9 10 public static...

posted @ sabato 29 dicembre 2007 15:31 | Feedback (0) | Filed Under [ C# ]

Sapere quando è disponibile una connessione di rete

Il .NET Framework 2.0 offre due classi che consentono di sapere se una connessione di rete è disponibile e di ricevere notifiche quando lo stato della connessione cambia: si tratta rispettivamente di NetworkInterface e NetworkChange, entrambe contenute nel namespace System.Net.NetworkInformation. In particolare, NetworkChange è una classe statica che espone un metoodo di nome NetworkAvailabilityChanged, che viene generato quando lo stato della connessione cambia da non disponibile a disponibile, e viceversa. Il problema di questa classe (se così si può chiamare) è che l'evento NetworkAvailabilityChanged viene generato in un thread secondario, quindi se si cerca di aggiornare l'interfaccia utente nell'handler di...

posted @ giovedì 27 dicembre 2007 01:39 | Feedback (1) | Filed Under [ C# ]

MSDN Magazine di Gennaio 2008

Neanche la vacanze di Natale fermano gli autori di MSDN Magazine: da pochi giorni è disponibile online l'edizione di Gennaio 2008. Anche questo numero ha un chiaro orientamento verso lo sviluppo Web (a me è subito caduto l'occhio sull'articolo Drag and Drop with ASP.NET AJAX). Fate clic qui per accedere all'edizione inglese, oppure qui per quella italiana. Technorati tags: .NET, Programming, CS, VB .NET, ASP .NET, AJAX, Silverlight

posted @ mercoledì 26 dicembre 2007 13:04 | Feedback (0) | Filed Under [ C# VB .NET .NET Compact Framework ADO .NET & SQL ASP .NET .NET 3.0 Orcas & .NET 3.5 ]

Nuova versione di Vista Controls for .NET 2.0

Per chi non lo conoscesse, il mio progeto Vista Controls for .NET 2.0, avviato su CodePlex poco meno di un annetto fa, ha come obiettvo quello di realizzare una serie di controlli per Windows Forms che riproducono il look and feel dei nuovi oggetti dell'interfaccia grafica di Windows Vista, come i pulsanti con l'icona dello scudo, le caselle di testo con il cosiddetto cue banner, ecc. Recentemente, grazie al contributo di Lorenz Cuno Klopfenstein, la libreria è giunta alla versione 1.2, in cui, tra le altre cose, sono state aggiunte una nuova classe per il compositing DWM e gli effetti...

posted @ domenica 23 dicembre 2007 16:00 | Feedback (0) | Filed Under [ C# CodePlex ]

DataObject, DataObjectMethod e DataObjectField

Negli ultimi giorni ho utilizzato il wizard per la creazione di un ObjectDataSource. Nella prima schermata, dove vengono mostrati gli oggetti che si possono utilizzare come sorgente, c'è una casella di nome Show only data components, di cui ignoravo il significato. Questa mattina, mentre cercavo tutt'altro, ho capito a cosa serve: si tratta di una funzione che ha che fare con gli attributi DataObject, DataObjectMethod e DataObjectField. Questi sono una sorta di "aiuti" per il wizard: grazie ad essi, infatti, la procedura guidata è in grado di proporre automaticamente le scelte più corrette per la definizione dell'ObjectDataSource. Mi spiego meglio....

posted @ giovedì 20 dicembre 2007 23:15 | Feedback (0) | Filed Under [ C# ADO .NET & SQL ASP .NET ]

Inserire un valore null in un campo datetime di SQL Server

L'applicazione che sto sviluppando recupera una serie di informazioni da una base di dati, comprese alcune date. Poiché i campi datetime nel database ammettono il valore null, per manipolare le date utilizzo il tipo Nullable<DateTime>, grazie al quale riesco facilmente a capire se nessuna data è stata specificata nella base di dati. Questo sistema ha però un problema. Supponiamo di dover aggiornare un campo datetime, inserendo al suo interno il valore null. Se io creo un oggetto SqlParameter di tipo SqlDbType.DateTime (con il parametro chiamato @dataScandenza) e imposto la sua proprietà Value su null, andando ad eseguire il metodo SqlCommand.ExecuteNonQuery...

posted @ sabato 15 dicembre 2007 13:31 | Feedback (5) | Filed Under [ C# ADO .NET & SQL SQL Server ]

[70-529] Errata corrige #5

Altro errore di codice nel Self-Paced Training Kit per l'esame 70-529. Omai sono sicuro che si tratti di discriminazione... In questo post avevo segnalato gli errori in in due listati C#, mentre il corrispondente in VB .NET era corretto. E la stessa cosa accede a pagina 95; nel codice C# viene fatto questo controllo:  if (Session["UserID"] != null) Tuttavia, nel corpo dell'if si aggiunge alla Session un oggetto con chiave UserID , invece si recuperarlo. Un'occhiata alla versione VB .NET chiarisce ogni dubbio: prima di aggiungere l'oggetto alla sessione, bisogna verificare che Session["UserID"] sia uguale a null, e non diverso Ma cosa vi ha fatto...

posted @ venerdì 14 dicembre 2007 14:56 | Feedback (0) | Filed Under [ C# VB .NET ASP .NET Certificazioni ]

Un correttore ortografico per Visual Studio

Mikhail Arkhipov ha realizzato un add-in per Visual Studio 2005/2008 che aggiunge un correttore ortografico all'editor dell'ambiente di sviluppo. Il tool supporta i linguaggi HTML, ASP.NET, JScript, VB, C#, CSS and C++ ed è in grado di segnalare gli errori presenti nei commenti, scritti in uno qualunque dei seguenti formati: HTML style comments <-- HTML --> ASP.NET server side comments: <%-- ASP.NET --%> JScript, C# and C++ comments: // C++ style comments CSS and C style comments: /* C style comments */ ...

posted @ giovedì 13 dicembre 2007 12:52 | Feedback (1) | Filed Under [ C# VB .NET .NET Compact Framework ASP .NET .NET 3.0 Orcas & .NET 3.5 ]

[70-529] Errata corrige #4

Gli esempi di codice C# alle pagine 61-62 del Selft-Paced Training Kit per l'esame 70-529 sono sbagliati. In particolare, a pagina 61 in alto la riga di codice MyWebService wsHeader = new MyWebService.VendorHeader(); Dovrebbe essere MyWebService.VendorHeader wsHeader = new MyWebService.VendorHeader(); Poi, a pagina 62, nel secondo esempio di codice C# mancano le parentesi quadre nella definizione della variabile unknownHeader, dal momento che si tratta di un array di oggetti di tipo SoapUnknownHeader. E' interessante notare che, in entrambi i casi, il corrispondente esempio in VB .NET è corretto. Che si tratti di discriminazione? Technorati Tags: Certification, Programming, .NET, CS

posted @ mercoledì 12 dicembre 2007 17:19 | Feedback (1) | Filed Under [ Certificazioni ]

Utilizzare gli extension methods anche con .NET 2.0

Il post di ieri di Daniele Mantovani mi ha fatto nascere un dubbio: dal momento che il Common Language Runtime del .NET Framework 3.5 è lo stesso della versione precedente e che gli extension methods sono semplicemente "zucchero sintattico", c'è un modo per utilizzarli anche con i progetti indirizzati a .NET 2.0? La risposta è... sì, è possibile! Vediamo come fare. Creiamo un progetto .NET 2.0 con Visual Studio 2008 e definiamo la seguente classe: 1 using System; 2 using System.Text; 3 4 namespace ExtensionMethods 5 { 6 public static class Utils 7 ...

posted @ domenica 9 dicembre 2007 12:57 | Feedback (7) | Filed Under [ C# Orcas & .NET 3.5 ]

[70-529] Ufficio complicazioni affari semplici

A pagina 50 e seguenti del Self-Paced Training Kit per l'esame 70-529 si parla di come utilizzare le classi del namespace System.Xml.Serialization per modificare il modo in cui un oggetto viene serializzato in formato XML. Viene spiegato, ad esempio, come cambiare il nome di un campo. Per esemplificare i concetti si utilizza la seguente classe: public class Vendor { public int VendorID; public string AccountNumber; public string Name; } Nel testo vengono mostrati i passaggi necessari per fare in modo che il campo AccountNumber di un oggetto Vendor serializzato in XML venga automaticamente...

posted @ venerdì 7 dicembre 2007 00:09 | Feedback (0) | Filed Under [ C# Certificazioni ]

Visual Studio 2008 Training Kit

Sul blog di MSDN Italia viene annunciata la disponibilità di un training kit per Visual Studio 2008, comprendente materiale per un corso di 5 giorni che tocca le seguenti tecnologie: LINQ, C# 3.0, VB 9, WCF, WF, WPF, Windows CardSpace, Silverlight, ASP.NET Ajax, .NET Compact Framework 3.5, VSTO 3.0, Visual Studio Team System, e Team Foundation Server. Io vado subito a darci un'occhiata Technorati tags: Visual Studio, .NET, CS, VB .NET, ASP .NET, AJAX, .NET Compact Framework, Silverlight, Team Foundation Server

posted @ giovedì 22 novembre 2007 13:03 | Feedback (0) | Filed Under [ C# VB .NET .NET Compact Framework ASP .NET Orcas & .NET 3.5 Team Foundation Server Silverlight ]

C# 3.0 e la parola chiave "var"

Una delle prime cose che ho "scoperto" provando il .NET Framework 3.5 è stata la parola chiave var di C#. Ad essa sono già stati dedicati innumerevoli post, ma voglio comunque citare questo articolo, in cui si dice che cosa non si può fare con var: Things to remember, Ø       var cannot be used as public property/field Ø       var cannot be a return type of any method Technorati Tags: .NET, CS

posted @ martedì 6 novembre 2007 10:26 | Feedback (0) | Filed Under [ C# Orcas & .NET 3.5 ]

[70-528] Cross Site Scripting ed encoding delle stringhe

Quando vengono presentati i Web Controls nel Self-Paced Training Kit dell'esame 70-528, si parla dei rischi del Cross Site Scripting. Per fare una prova, ho inserito in una TextBox il seguente contenuto: <script>altert("Ciao");</script> Effettuando il post della pagina (attraverso la pressione di un pulsante), ho ottenuto il seguente messaggio di errore di ASP .NET: A potentially dangerous Request.Form value was detected from the client (TextBox1="<script>altert("Ciao...").Description: Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted. This value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack....

posted @ lunedì 24 settembre 2007 19:09 | Feedback (32) | Filed Under [ C# ASP .NET Certificazioni ]

[70-528] Oggetto Button ed evento Command

A pagina 84 del Self-Paced Training Kit dell'esame 70-528 di parla dell'oggetto Button (System.Web.UI.WebControls.Button). In particolare, si dice che un pulsante può essere un tradizionale submit button (che è l'impostazione di default), oppure un pulsante di comando. Per creare un Button di quest'ultimo tipo, è necessario impostare le sue proprietà CommandName e CommandArgument. Tuttavia, nel testo manca un passaggio fondamentale: dopo aver settato questa proprietà, si deve gestire l'evento Command e usare le proprietà dell'oggetto CommandEventArgs per sapere qual è il comando da eseguire ed, eventualmente, gli argomenti ad esso associati. Ad esempio, supponiamo che nella pagina ASPX siano stati...

posted @ domenica 23 settembre 2007 14:31 | Feedback (0) | Filed Under [ C# ASP .NET Certificazioni ]

DataAdapter e apertura della connessione

I DbDataAdapter di .NET si basano su oggetti di tipo DbCommand per selezionare, aggiornare, aggiungere ed eliminare le informazioni dalla base di dati sottostante. Gli oggetti DbCommand, a loro volta, mantengono un riferimento alla DbConnection che corrisponde all'origine dati in questione. Tale connessione non deve necessariamente essere aperta prima di richiamare i metodi del DbDataAdapter: nel caso in cui sia chiusa quando si eseguono i metodi del DbDataAdapter, viene aperta automaticamente, per poi essere richiusa al termine dell'operazione. E' possibile verificare questo comportamento con un semplice esempio. Consideriamo il seguente stralcio di codice: 1 SqlConnection db = new...

posted @ sabato 22 settembre 2007 14:30 | Feedback (0) | Filed Under [ C# ADO .NET & SQL ASP .NET ]

Nuovi Starter Kit per Windows Mobile 6

Sono stati resi disponibili nuovi Starter Kit per Windows Mobile 6. All'indirizzo http://msdn2.microsoft.com/en-us/windowsmobile/bb264330.aspx si possono trovare due applicazioni scritte in C# e quattro in C++. Technorati Tags: .NET Compact Framework, CS

posted @ venerdì 21 settembre 2007 09:52 | Feedback (0) | Filed Under [ .NET Compact Framework ]

Aggiungere uno UniqueConstraint ad un DataTable

L'oggetto DataTable dispone della proprietà Constraints, con cui si possono specificare i vincoli di unicità (UniqueConstraint) e di chiave esterna (ForeingKeyConstraint) per la tabella. Ma nel caso in cui si voglia definire un vincolo unique, è possibile evitare la creazione di un oggetto di tipo UniqueConstraint semplicemente impostando a true la proprietà Unique della DataColumn relativa: così facendo, lo UniqueConstraint su quella colonna viene aggiunto automaticamente. In altre parole, i seguenti stralci di codice sono equivalenti: DataTable dt = new DataTable(); DataColumn id = new DataColumn("Id", typeof(int)); dt.Columns.Add(id); UniqueConstraint unique = new UniqueConstraint(id); dt.Constraints.Add(unique); e DataTable dt = new DataTable(); DataColumn id = new DataColumn("Id", typeof(int)); id.Unique...

posted @ martedì 18 settembre 2007 16:37 | Feedback (0) | Filed Under [ C# ADO .NET & SQL ]

[70-526] Errata corrige "Special" #5

A quanto pare sul BackgroundWorker ci sono più domande sbagliate che corrette. Una di esse chiede come si può controllare se si è verificato un errore nell'esecuzione del metodo in background. La seguente soluzione è segnalata come corretta (il codice è inserito nel gestore dell'evento RunWorkerCompleted): if (e.Error == null) MessageBox.Show("Error"); Ma non è così. La proprietà Error viene impostata sull'eventuale eccezione che si verifica durante l'esecuzione del metodo in background, quindi per sapere se c'è stato un errore si deve controllare se essa è diversa da null: if (e.Error != null) MessageBox.Show("Error"); C'è un altra domanda relativa al...

posted @ sabato 8 settembre 2007 14:36 | Feedback (0) | Filed Under [ Certificazioni ]

[70-526] UniqueConstraint e chiavi primarie

Se si imposta la proprietà PrimaryKey di un DataTable su una o più colonne, viene automaticamente aggiunto uno UniqueConstraint su tali colonne. Supponiamo che dt e col1 siano, rispettivamente, un DataTable e un DataColumn che fa parte della collezione Columns di dt; eseguendo il seguente codice: 1 dt.PrimaryKey = new DataColumn[] { col1 }; 2 UniqueConstraint unique = new UniqueConstraint(col1); 3 dt.Constraints.Add(unique); Si ottiene una DataException alla riga 3, perché il  constraint è già stato implicitamente aggiunto quando è stata impostata la chiave primaria della tabella (riga 1). Se, invece, si cambia l'ordine di esecuzione, spostando in fondo la prima istruzione: 1 UniqueConstraint...

posted @ mercoledì 8 agosto 2007 21:12 | Feedback (0) | Filed Under [ Certificazioni ]

[70-526] Recuperare il link di un controllo LinkLabel

Il controllo LinkLabel non espone una proprietà che consente di recuperare diretamente il testo del link visualizzato al suo interno. Per ottenere tale informazione, è necessario utilizzare la proprietà LinkArea, la quale specifica la porzione di testo che deve apparire "linkata". Nel caso in cui il recupero del testo del link sia un'operazione frequente, può essere utile creare un controllo che estende LinkLabel e vi aggiunge la proprietà mancante: using System; using System.ComponentModel; namespace System.Windows.Forms { public class LinkLabelEx : LinkLabel { [Browsable(false)] public...

posted @ lunedì 30 luglio 2007 21:10 | Feedback (1) | Filed Under [ C# Certificazioni ]

[70-536] Errata corrige #4

Questa non è un'errata corrige sul libro, bensì sul CD allegato, e in particolare sulle domande contenute nei quiz di preparazione all'esame. Utilizzando il Certification Mode, capita spesso di trovare soluzioni sbagliate. Ad esempio: Il seguente stralcio di codice: TextWriter tx = new StreamWriter(@"D:\Prova.txt"); tx.Write("Hello world"); tx.Close(); è presentato come una delle alternative per la scrittura di un file di testo... Andando a vedere la correzione, questa soluzione è segnalata come sbagliata, in realtà essa compila e viene eseguita correttamente, producendo il risultato atteso Una domanda chiede come lanciare un thread in modo da minimizzare l'impatto sulle prestazioni delle altre applicazioni: tra le alternative,...

posted @ martedì 17 luglio 2007 18:55 | Feedback (0) | Filed Under [ Certificazioni ]

[70-536] Recuperare il proprietario di un file

Per recuperare il proprietario di un file o di una directory è necessario utilizzare, rispettivamente, gli oggetti FileSecurity e DirectorySecurity. La seguente routine consente di recuperare il nome del proprietario del file specificato: private static string Owner(string fileName) { FileSecurity fs = File.GetAccessControl(fileName); NTAccount acc = (NTAccount)fs.GetOwner(typeof(NTAccount)); return acc.Value; } Dopo aver ottenuto l'oggetto *Security corrispondente, viene creato un NTAccount che contiene il riferimento al proprietario del file. Technorati Tags: Certification, .NET, Programming, CS

posted @ martedì 17 luglio 2007 11:22 | Feedback (0) | Filed Under [ C# Certificazioni ]

[70-536] Utilizzare correttamente l'attributo PrincipalPermissionAttribute

Utilizzando opportunamente l'attributo PrincipalPermissionAttribute si può consentire l'esecuzione di un metodo solo agli utenti autenticati, a quelli che fanno parte di uno determinato gruppo, oppure ad un utente specifico. Ad esempio, per fare in modo che un metodo possa essere eseguito solo dagli utenti che appartengono al gruppo Admistrators della macchina locale, basta scrivere: [PrincipalPermission(SecurityAction.Demand, Role=@"BUILTIN\Administrators")] private static void AdministratorOnly() Perché questo codice funzioni, è necessario configurare la principal policy corrente in modo che si appoggi alle funzioni di sicurezza di Windows. In pratica, prima dell'esecuzione del metodo AdministratorOnly bisogna eseguire questa riga di codice: AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); Senza di essa, arrivando ad eseguire il metodo...

posted @ venerdì 6 luglio 2007 16:42 | Feedback (0) | Filed Under [ C# Certificazioni ]

Extension Methods

Tra le numerosissime novità del .NET Framework 3.5 che sto sperimentando in questi giorni, oggi voglio segnalare gli Extension Methods. Come riportato qui: The basic idea is that the set of methods available on an instance of a particular type is open to extension. In effect, we can add new methods to existing types. Supponiamo di eseguire sempre la stessa operazione su un certo tipo di dati, ad esempio ottenere l'array di byte a partire dal contenuto di una stringa. Una soluzione tipicamente adottata fino ad oggi consiste nel definire una classe statica con il metodo che esegue l'operazione,...

posted @ lunedì 5 marzo 2007 21:18 | Feedback (5) | Filed Under [ C# VB .NET Orcas & .NET 3.5 ]

Visual Basic .NET e i metodi case-sensitive del C#

Visual Basic .NET è case-insensitive, mentre C# fa differenza tra maiuscole e minuscole. C'è un caso in cui questo comportamento può causare problemi. La seguente classe C# compila correttamente: 1 public class TestClass 2 { 3 public void Foo(string str) 4 { 5 MessageBox.Show("Richiamata Foo con parametro " + str); 6 } 7 8 public void foo(string str) 9 { 10 ...

posted @ domenica 4 marzo 2007 13:00 | Feedback (5) | Filed Under [ C# VB .NET ]

La TreeView di Windows Vista

Ho già avuto modo di parlare di alcuni dei nuovi controlli introdotti da Windows Vista. Oggi è la volta della TreeView. Osservando il controllo utilizzato da Explorer per visualizzare l'elenco delle cartelle, si nota che i vari rami non sono più collegati da una linea e che, al posto del segno + per segnalare la presenza di sottoelementi, viene utilizzata una piccola freccina che si inclina verso il basso quando si espande una voce. Infine, la barra di scorrimento orizzontale è scomparsa: quando si sposta il mouse su un elemento che non è completamente visibile, la TreeView effettua lo scrolling automaticamente. E' possibile ottenere...

posted @ mercoledì 31 gennaio 2007 18:13 | Feedback (1) | Filed Under [ C# ]

Powered by:
Powered By Subtext Powered By ASP.NET