Home Page Home Page Articoli Più facile con il .NET Framework 2.0 :-)

Più facile con il .NET Framework 2.0 :-)

Da quando ho cominciato a "smanettare" per arrivare poi a "lavorare" con il framework 1.x, mi sono trovato subito a mio agio con gli elementi che il .NET metteva a disposizione, ma per alcune cose già sapevo che avrei dovuto lavorare. Con la versione 2.0 del Framework alcune di queste sono state già inserite semplificandomi ulteriormente la vita...
Autore: Matteo Raumer Livello:
Utilizzando il Framework ero psicologicamente preparato a non trovare tutto quello che cercavo perchè non avrebbe senso personalizzare troppo ma piuttosto avrei dovuto estendere gli oggetti che utilizzavo, il tutto devo dire in modo abbastanza rapido e efficace.
Per alcune cose pero', pensavo tra me e me, sarebbe stato carino averle gia' integrate, ed ecco che qualcosa sia dal punto di vista dei controlli che degli oggetti stessi del Framework, sono riuscito a trovarla. In questi articolo diamo un'occhiata ad alcune cose che evrei voluto trovare e finalmente le ho trovate...

Adoro la Barra degli Indirizzi di Internet Explorer
La prima cosa che ho fatto con l'oggetto ComboBox 1.x è stato estenderlo per avere l'effetto "intellisense" mentre scrivo, ovvero quello che fa la barra degli indirizzi di Internet Explorer.
Il codice faceva l'override del keyUp e tirava fuori i valori nella combo che cominciavano per, esempio:


Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs)
'--- se premo i tasti che non servono allora non faccio nulla
If ((e.KeyCode = Keys.Back) Or _
(e.KeyCode = Keys.Left) Or _
(e.KeyCode = Keys.Right) Or _
(e.KeyCode = Keys.Up) Or _
(e.KeyCode = Keys.Delete) Or _
(e.KeyCode = Keys.Down) Or _
(e.KeyCode = Keys.PageUp) Or _
(e.KeyCode = Keys.PageDown) Or _
(e.KeyCode = Keys.Home) Or _
(e.KeyCode = Keys.ShiftKey) Or _
(e.KeyCode = Keys.End)) Then Return


Dim zTxt As String = Me.Text
Dim zInd As Integer = FindString(zTxt) '--- se lo trovo torna >=0
If (zInd > -1) Then
Me.SelectedIndex = zInd '--- seleziono anche l'elemento che trovo
Me.SelectionStart = zTxt.Length '--- mi sposto e seleziono il testo che ce dopo
Me.SelectionLength = Items(zInd).ToString().Length
Me.DroppedDown = qApri
End If
End Sub


Questo codice nella versione 2.0 non serve perche si puo' utilizzare le propieta AutoComplete (anche a Design Time):


comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;






L'effetto ovviamente è lo stesso ma direi molto piu comodo e inoltre da notare che vale anche per la TextBox e si puo' pescare non solo dagli Items, ma anche dai collegamenti di Internet Explorer,e cartelle dell'hard disk....


E se volessi l'audio?
Per suonare un file audio con la 1.1 bisogna ricorrere all'uso di API particolari per accedere al Device dell'audio con codice veramente scomodo, del tipo:


[DllImport("winmm.dll", CharSet=CharSet.Ansi)]
private static extern bool PlaySound(IntPtr szFileName, IntPtr hmod, int fdwSound);


Finalmente è stato aggiunto un controllo che permetta la riproduzione di file audio (controllo "SoundPlayer") al quale basta impostare il percorso del file e dire di suonarlo:


soundPlayer1.SoundLocation = "f:\\temp\\miofile.wav";
soundPlayer1.Play();



A me non interessa il codice che deriva dalla progettazione visuale...
Quando apro Visual Studio .NET e comincio a disporre oggetti sulla Form spesso lo faccio tramite design percio' mediamente non mi interesso del codice generato in utomatico dall'ambiente.
Non appena passo al codice e dichiaro variabili etc.. percio', la prima cosa che faccio è creare la regione che riguarda tutti i controlli della form, per avere a colpo d'occhio soltanto il codice scritto da me.
Tutto questo adesso viene fatto in automatico (grazie al "partial") perche il codice della progettazione visuale viene automaticamente scritto nel file "formdesigner.cs" che poi al momento della compilazione viene linkato al resto dell'applicazione.


ProgressBar nella StatusBar
Un'altra cosa molto carina che ho trovato utile implementare per alcuni progetti è una ProgressBar all'interno della StatusBar (anche qui "IE like" anche se spesso l'avanzamento e' fasullo...)
Cosa fare se non costruire ad hoc un controllo che eredita dalla StatusBar del Framework, aggiungendogli la ProgressBar che poi deve essere gestita tramite propieta' pubbliche.
La versione 2.0 ci viene in aiuto e ci dà la possibilita di aggiungere un Item di tipo non solo "StatusStripPanel" standard ma anche il tipo "ToolStripProgressbar", ComboBox, TextBox che poi sono poi "raggiungibili" come se fossero normali oggetti del form:



e anche la Toolbar adesso diventa finalmente in stile Office di Default (cosa che mediamente puo andare bene a tutti ormai ;-) estendendo la tipologia di bottoni da aggiungere, quando prima si doveva ricorrere ad assembly di terze parti.

Framework 1.x
Framework 1.x


Framework 2.0
Framework 2.0


Per non parlare di alcune vere e proprie "chicche" tipo la possibilita' di raggruppare gli Items nella ListBox, la MaskEditBox e finalmente il componente WebBrowser inserito di standard e "wrappato" in modo migliore.
Dal punto di vista delle classi che si usano da codice qualche novità che aspettavo è arrivata da parte di ADO.NET.

DataTable in XML, finalmente!
Quella che ho cercato subito e non so come mai si sia aspettato cosi tanto per farla, e' certamente la serializzazione della DataTable che ora diventa come il DataSet.
Questo significa che anche la DataTable adesso gode delle comodita' di lettura/scrittura di file/stream Xml con i metodi ReadXml/WriteXml che prima si aveva solo con tutto il DataSet.
Vantaggio che si nota immediatamente quando si utilizzano Web Services che fanno query o operazioni ui dati e si deve passare sempre per il DataSet, non che sia impossibile ma sicurmente meno "pulito".
Inoltre adesso si puo' scegliere il tipo di serializzazione anche in binario per prestazioni soprattuto per chi usa il .NET Remoting.

Non solo Interfacce al db per supportarne di differenti...
Per quanto riguarda la connessione al database io mi sono sempre trovato a scrivere programmi che supportassero varie tipologie di database tipicamente Access e SQL Server ma ultimamente anche MySQL.
Cosa fare in questo caso per non cambiare tutto il codice? Beh, l'unica cosa direi è affidarsi ad una classe fatta da me che mi esponga i metodi che utilizzo tipicamente quando devo leggere e scrivere dati, assolutamente indipendenti dalla tipologia di database, ma che all'interno lavori con oggetti tipizzati.
Ovvero io creo un oggetto che instanziato lavora con interfacce comuni tipo IDbConnection ,IDbDataAdapter, IDbCommand etc...le quali a seconda dei parametri diventano poi i relativi oggetti esatti. Ad esempio per fare la connessione:


string zCnStr = StringaConnessione(...

IDbConnection zCn = null;
switch(pTipo)
{
case TipoDb.Sql:
zCn = new SqlConnection(zCnStr);
break;

case TipoDb.Mdb:
zCn = new OleDbConnection(zCnStr);
break;

case TipoDb.MySql:
zCn= new MySqlConnection(zCnStr);
break;
}

....


Basta un po' di pazienza e del buon codice e la trasparenza si ottiene, ma bisogna tener presente che se in futuro si supportano altri database, si devono modificare molte parti della classe.
Inoltre al suo interno sono obbligato a lavorare con l'oggetto di tipo IDbConnection, e quindi mi trovo a perdere alcuni metodi:



Adesso invece finalmente le classi che riguardano il database ereditano tutte da delle classi base che appartengono al namespace System.Data.Common che ad esempio per la connesione e' DbConnection che supporta maggiori proprietà e metodi:



Proprio per la connessione in particolare ho trovato molto utile il metodo GetSchema dato che nel caso di SQLdovevo aggirare l'ostacolo con query abbastanza complicate...

La stessa cosa vale ovviamente per i Dbdatadapter,Dbcommand etc...

Direi che nel mio caso dove ho dovuto progettare una classe abbastanza complessa per rendere questo problema trasparente al programma è un notevole risparmio di tempo! Purtroppo al momento non lo fanno le classi per MySQL (tipicamente uso ByteFX o MySQLDriverCS) ma sono fiducioso che appena sara' rilasciato in RTM il Framework 2.0 anche gli altri si adatteranno a questa ottima struttura ;-)

Per quanto riguarda ASP.NET devo ancora andare a fondo ma ho gia' visto cose strabilianti come le Master Pages, i Menu e le TreeView, il SiteMap, i controli per gli utenti (login,account etc..), gli Styles etc... e sono convinto che man mano che esploro il Framework 2.0 ne trovero' altre che mi invoglieranno sempre di piu a passare a questa versione il prima possibile... ;-)
Voto medio articolo: 3.8 Numero Voti: 6
Matteo Raumer

Matteo Raumer

Laurea breve in Ingegneria Elettronica presso l'Universita di Padova nel 2001, e nel febbraio 2009 un'altra triennale in Ingegneria Informatica. Da anni lavoro come programmatore .NET principalmente in C#, per migrare applicativi win32 in applicazioni ASP.NET. Ho sviluppato inoltre parecchia reportistica su Cr... Profilo completo

Articoli collegati

Riordinare le righe di una GridView con AJAX
La GridView, un controllo molto potente e flessibile che però non può offrire tutto. Vediamo in questo articolo come estenderlo implementando meccanismi di reordering delle righe usando AJAX
Autore: Riccardo D'Aria | Difficoltà:
Membership, Role e Profile Provider personalizzati
Chi deve gestire in modo consistente autenticazione, gestione dei ruoli e profilazione degli utenti di un sito Internet non può non conoscere i Providers (MembershipProvider, RoleProvider e ProfileProvider) offerti da ASP.NET. Vediamo che cosa sono, a cosa servono e come si costruiscono.
Autore: Marco Rossi | Difficoltà: | Commenti: 13
Da AJAX ad Atlas nuove tecnologie per un Web di nuova generazione
Nell'ultimo periodo si è parlato molto di Atlas l'ultima tecnologia Microsoft per rendere le pagine web dinamiche, interattive e molto più attraenti, in modo da essere sempre più somiglianti a vere e proprie applicazioni Windows. Cominciamo a conoscere questa tecnologia per sapere cosa potremo fare nelle applicazioni ASP.NET di prossima generazione.
Autore: Matteo Raumer | Difficoltà: | Commenti: 6
La classe Profile di ASP.NET 2.0
In un'applicazione ASP.NET è cosa comune avere la necessità di gestire alcune proprietà che caratterizzino ogni utente, sempre disponibili tra le varie pagine. L'approccio con la versione 1.1 del Framework si basava sull'uso dell'oggetto Session. Con la versione 2.0 il Framework ci mette a disposizione la classe Profile.
Autore: Matteo Raumer | Difficoltà: | Commenti: 3 | Voto:
Le WebParts in ASP.NET 2.0
Scopriamo le WebParts, i nuovi Web Controls di ASP.NET 2.0 che consentono di personalizzare sia i contenuti che l'interfaccia grafica delle nostre applicazioni Web, tecnologia giù utilizzata ampiamente nel prodotto Sharepoint Portal Server 2003.
Autore: Marco Caruso | Difficoltà: | Commenti: 6 | Voto:
Scopriamo l'oggetto Gridview di ASP.NET 2.0
Nonostante la Datagrid di ASP.NET 1.x offrisse già molta flessibilità, con il Framework 2.0 è stato introdotto un nuovo oggetto, la Gridview, erede della DataGrid che, migliorata e potenziata, faciliterà di molto la vita agli sviluppatori Web.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 1 | Voto:
Configurazioni Web con ASP.NET 2.0
Vediamo come cambia e come viene semplificata la configurazione in ASP.NET 2.0 attraverso i nuovi controlli di login, il tool d'amministrazione e l'amministrazione attraverso Internet Information Server (IIS)
Autore: Marco Caruso | Difficoltà: | Commenti: 4
ASP.NET Themes e Skins con Visual Studio .NET 2005
Una delle novità introdotte in Whidbey è la possibilità di applicare dei Temi (Themes) alle nostre applicazioni o pagine Web e addirittura applicare delle Skins singolarmente ai controlli delle Web Forms in modo estremamente flessibile e rapido.
Autore: David De Giacomi | Difficoltà: | Commenti: 3 | Voto:
Anteprima su Visual Studio .NET 2005
Visual Studio .NET Whidbey, ossia la prossima versione di Visual Studio .NET basato sul Framework 2.0 è ancora in cantiere ma grazie all'Alpha rilasciata agli sviluppatori in occasione della PDC 2003 possiamo vedere quali novità ci aspettano. Eccone alcune!
Autore: David De Giacomi | Difficoltà: | Commenti: 2
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5