[ links ]
Certe volte mi vengono in mente pensieri e sentimenti che si contraddicono l'un l'altro.
E' per questo che ho raggiunto la conclusione che nel mio cervello
devono esserci un sacco di persone diverse.
[Iain Banks]
Home -
Tommaso -
Blog -
Avventure Testuali -
Download -
Contatti
[Avventure Testuali]
[Death Metal] Indirizzi di alcune tra le mie band preferite.
[Horror / Splatter / Zombie]
[Sdreuss (Miscellanous)]
- Eymerich.
Il grande inquisitore, di Valerio Evangelisti.
[Programmazione in .NET]
Di seguito sono elencati link utili (raccolti dai vari newsgroup) riguardanti problematiche comuni nello sviluppo di applicazioni .Net;
la maggior parte dei link fanno riferimento al linguaggio C# ma alcuni esempi possono essere facilmente riscritti in VB.NET.
Gli argomenti trattati sono:
Manuali -
.NET -
Layers -
Software Design Patterns -
Programming -
GUI / Controls -
Datagrid -
ADO.NET -
XML -
Late Binding -
Graphics (GDI+) -
Utilizzare Prodotti OFFICE -
Serializzazione -
Thread -
Network -
Garbage Collector -
API / COM -
WINDOWS -
Autenticazione e Sicurezza -
Permission -
Crypt / Decrypt -
Miscellanous -
Web Service
ASP.NET
*** Windows Application ***
MANUALI
Manuale C# Microsoft.
.NET
An article on reducing size of .NET executables (articolo).
Implementing Callback Functions (articolo).
Come si può debuggare un progetto quando alcune parti sono operative a design time ?
Devi lanciare una seconda istanza di vs.net e fare Debug \ Processes \ Attach sull'istanza di vs.net
che ha il codice da debuggare a design time.
Asynchronous Delegates (articolo).
Come è possibile impedire che il programma venga eseguito più volte dall'utente.
Come posso creare una copia di un oggetto?
- shallow copy: aggiungi un metodo Copy il quale non fa altro che ritornare il valore di MemberWiseClone
- deep copy: serializzare l'oggetto e tornare l'oggetto deserializzato
Non implementare Icloneable in ogni caso.
Una mia applicazione abbastanza complessa occupa sempre piu' memoria utilizzandola.
Esiste una maniera per vedere quali oggetti non la rilasciano?
-
Allocation Profiler
-
CLR SPY
Come intercettare le eccezioni non gestite.
LAYERS
Architetture (articolo).
Improving .NET Application Performance and Scalability (articolo).
Progettazione di componenti per l'accesso ai dati e passaggio dei dati da un livello all'altro.
Business e Data Layer.
SOFTWARE DESIGN PATTERNS
Articolo sui pattern (dofactory.com).
Articolo sui pattern (wikipedia.org).
Dispose. Lo scopo di dispose è quella di liberare le risorse (non la memoria) immediatamente se il programmatore la
chiama esplicitamente (come si dovrebbe sempre fare), liberare le risorse tramite Finalize (sintassi del distruttore di C#) se
il programmatore si dimentica di chiamare Dispose esplicitamente.
PROGRAMMING
Volevo farmi tornare dal metodo .toArray() un array di miei oggetti, come posso fare?
- arrayList.ToArray(typeof(TipoDelMioOggetto))
Vorrei inserire all'interno di un Form un'animazione flash
- E' possibile, purché sulla macchina dove gira l'applicazione .NET ci sia installato un lettore .swf;
se è installato il lettore, avrai anche un controllo .ocx che puoi inserire nella WinForms per poter caricare
un file o applicazione .swf. Dopo aver aggiunto il componente aggiungi la riga
AxShockwaveFlash1.Movie = "http://www.sitointernet.com/file.swf"
Lancia il progetto e vedrai l'applicazione/animazione Shockwave/Flash in una Windows Form .NET.
E' possibile rendere semi-trasparente un form figlio di un altro form, ma lasciare il form padre completamente visibile?
- No, come dice questo
articolo: "The Opacity property does not affect the appearance of MDI child forms".
Vorrei distribuire un file Word/Excel come template, come posso fare?
- Ti basta includere il file dentro la solution, marcarlo come 'embedded resource',
fare un rebuild all ed estrarlo con la funzione GetManifestResourceStream.
Come faccio a creare una Collection tipizzata, cioè collection che come parametro utilizzino solamente dei tipi da me definiti?
- Crea una classe che eredita da CollectionBase e tipizza i metodi Add e il relativo indexer
GUI / CONTROLS
Un pannello comandi (toolbox) tipo IDE .Net
Intercettare il tasto Tab. Usare Control.ProcessCmdKey(), cioè creati un controllo che eredita ad esempio da textbox
e fai l'override della ProcessCmdKey().
Menu con icone.
NetControls.org - Free Controls for Microsoft .NET
Componente chart gratuito (cartesiani, istogrammi, etc...) per Windows Form.
Un altro componente chart gratuito (cartesiani, istogrammi, etc...) per Windows Form.
ZedGraph, un altro componente chart gratuito veramente interessante e flessibile.
HOW TO: Provide Automatic Text Completion (managed).
HOW TO: Provide Automatic Text Completion (unmanaged).
Come posso riscrivere un controllo come un Button o un TextBox?
- crei da zero un controllo che deriva da Control e aggiunge quello che serve
- crei un controllo composito che deriva da UserControl su cui dragghi i controlli che ti servono (usando quindi composition)
- derivi un controllo esistente (Texbox, Button, ...) ed estendi le caratteristiche.
HOW TO: Create a Smooth Progress Bar.
HOW TO: Customize the WinForm system menu.
Synchronized Scrolling of Multiple RichTextBox Controls.
A treeview that has drag and drop built in.
C# implementation of data binding TreeView.
A flexible drill-down combo control supporting hierarchical, cascading selections.
Accesso Thread-Safe a controlli Windows Forms.
A simple and easy class that draws the standard ComboBox as flat control.
L'oggetto "Label" di .Net ha una "A" nera come icona, mentre i miei controlli hanno un'ingranaggio giallo che vorrei cambiare.
- Usa la classe System.Draw.ToolboxBitmapAttribute
Come posso far sì che un controllo creato da me sia sempre in primo piano? Per intenderci, quando faccio comparire
una griglia voglio che questa copra i controlli.
- Usa il metodo Control.UpdateZOrder()
LeerTools: A suite of controls, dialogs and other useful methods.
How to pass custom objects in a drag-and-drop operation.
A control class for browsing through the network neighborhood.
An article on building a validating numeric entry control.
Coloring Tab Control.
A tutorial on creating a custom Windows Forms control from Start to Toolbox.
A scroll bar that may be displayed with optional thumb color, thumb gripper, and channel color.
DATAGRID
Tutto su Datagrid.
Se non vuoi permettere la creazione di una nuova riga, metti in bind la DataGrid con una DataView a cui metti false la proprietà AllowNew.
Enhance the DataGrid control with drag and drop support for column reordering.
HOW TO: Programmatically Set the DataGrid Column Width to the Longest Field.
DataGrid personalizzata con controlli e colori.
ADO.NET
Improving ADO.NET Performance (Performance and Scalability).
Il pool delle connessioni è dimensionabile a priori.
Salvare un file binario in un DB e viceversa.
HOW TO: Retrieve the Identity Value While Inserting Records into Access Database.
Retrieving Identity or Autonumber Values (general purpose).
HOW TO: Populate Datagrid on Background Thread.
Sintassi e operatori per una DataColumn.Expression.
Concorrenza (1° modo):
Optimistic Concurrency.
Concorrenza (2° modo): Eseguire un 'lock' logico scrivendo l'id della riga 'bloccata' dentro una tabella di servizio.
In questo modo continui a non usare cursori server ma comunichi semplicemente agli altri utenti che quella riga non deve essere
toccata. Se non in particolari casi, ti sconsiglio questo approccio.
Un articolo sulla
concorrenza in SQL Server a cura di Luca Bianchi.
Accesso a SQL Server: autenticazione Windows o autenticazione SQL Server?
Una via di mezzo potrebbe essere l'utilizzo delle "application role" (sp_setapprole).
La sp verrà richiamata all'avvio della tua applicazione e il suo compito è quello di far decadere i privilegi
correnti dell'utente per essere sostituiti da quelli previsti dal ruolo di applicazione che vai ad attivare.
Fin tanto che il ruolo di applicazione sarà attivo, e cioè fino a quando l'utente continuerà ad usare il tuo
applicativo, ecco che saranno possibili le normali operazioni di selezione/aggiornamento. Una volta chiusa
l'applicazione, l'utente sarà perfettamente "impotente". In questo modo i tuoi utenti, al di fuori della tua
applicazione, non possono fare assolutamente nulla.
Using SqlParameters with Stored Procedures in .NET
HOW TO: Perform Bulk Updates and Inserts Using OpenXML with .NET Providers in Visual C# .NET
HOW TO: Recuperare informazioni di schema con GetOleDbSchemaTable.
Come faccio a sapere quante connessioni disponibili ci sono in un connection pool per sql server? Puoi utilizzare i
performance counter.
HOW TO: Implement a DataSet JOIN.
HOW TO: Implement a DataSet GROUP BY.
XML
Come inserire e modificare chiavi e valori del file config xml?
- Aprirlo come file xml e scriverci.
- Utilizzare il Configuration Management Application Block per gestire configurazioni Read/Write.
Come analizzare un documento XML, ossia estrarre i nomi di tutti i nodi senza conoscerli
-
Un approccio è quello di usare la classe XmlTextReader.
-
Oltre ad usare XmlTextReader puoi usare anche il DOM.
Restituire un file XML tramite SQL Server.
Recuperare i dati memorizzati in un database in formato XML.
LATE BINDING
Come creare un istanza partendo dal nome della classe.
GRAPHICS (GDI+)
Garfici cartesiani (andare nella sezione download).
Rendering di oggetti in wireframe con GDI+.
Create a Graphical Editor Using RichTextBox and GDI+.
Working with Images in the .NET Framework.
Detect and Plug GDI Leaks in Your Code with a Powerful Tool for Windows NT/W2K/XP.
E' possibile ottenere un oggetto graphics da un oggetto PrintDocument prima che venga invocato l'evento Print?
- Puoi estendere PrintDocument e fare override di
OnPrintPage, il metodo accetta come parametro un PrintPageEventArgs e tra le proprietà del PrintEventArgs trovi
PrintPageEventArgs.Graphics.
OFFICE
Office Application Does Not Quit. Ti suggerisco caldamente di non usare GC.Collect come indicato in fondo all'articolo.
Come usare l'object model di Access da VB.NET.
Describes how to create an automation add-in for Excel using .NET.
Articolo/classe che realizza esportazione da una datatable/dataview a un file xls.
Understanding the Word Object Model from a .NET Developer's Perspective.
SERIALIZZAZIONE
Classi marcate con [Serializable()].
HOW TO: Serialize an Object to XML by Using Visual C# .NET.
How to fix DateTime values after .NET Xml Serialization.
Serializzare il contenuto di una directory per spedirlo via seriale.
- La libreria SharpZipLib
permette di creare un memory stream contenente lo zip ottenuto da file di una directory; questo stream può essere
trasmesso in una seriale e il ricevente può... semplicemente salvare su disco il file zip o direttamente
in memoria scompattarlo ricreando su disco la directory.
Un semplice Serialer/Deserializer che consente di mantenere l'informazione di una istanza di una classe custom.
THREAD
Synchronize Access to a Shared Resource in a Multithreading Environment.
Come utilizzare controlli windows da thread separati.
Smart Thread Pool implementation in .NET.
NETWORK
Aggiungere headers personalizzati alla classe WebClient.
Come controllare se il PC è connesso ad Internet:
-
tramite API InternetGetConnectedState
-
tramite la meno descrittiva API InetIsOffline
Se vuoi avere una notifica sul cambio di stato della connessione puoi farlo con una callback.
Come ottenere l'indirizzo IP che viene assegnato dal provider quando si è connessi
Utilizzare il webservice di www.showmyip.com
HOW TO: Leggere / Inviare e-mail.
HOW TO: enumerare tutti i pc attualmente visibili in lan.
Come risolvere il dominio da un ip passando da un DNS server non di sistema:
- ti scrivi una classe che fa da dns client
-
usi via PInvoke le DNS API
Chat program that supports Unicode input and picture transfer.
A Simple .NET TCP Socket Component (reusable C# code for client-server programming in .NET).
GARBAGE COLLECTOR
Gestione risorse (white paper).
API / COM
Exposing .NET Framework Components to COM (articolo).
Quando uso PInvoke e uno dei parametri della funzione è una stringa di output, il valore di ritorno è sempre null.
- Al posto di string bisogna usare StringBuilder.
Come usare DllImport e in generale tutto quello che riguarda API.
Playing .wav files using C#.
Diversi articoli per la gestione Audio.
Prototipo in C della API InternetStatusCallback.
Global Hook.
Global Hook (classe da riutilizzare).
Importing a Type Library as an Assembly.
Tutto sulle network API.
Tutto sulle storage API.
Usage of the Simple MAPI API.
C'è un modo per ridurre a icona la finestra attiva di un'altra applicazione (word, paint, blocco note, etc.)?
-
Devi usare la API ShowWindow, l'handle alla finestra lo trovi con FindWindow oppure EnumWindows.
An implementation of the undocumented GAC API in C#.
WINDOWS
A simple class for implementing Most Recently Used files functionality for multiple situations.
Just like MessageBox.Show but with an added timeout parameter.
Wrapper per Printer Dialog.
Come è possibile recuperare l'icona associata ad una finestra (avendo l'handle della finestra?).
The code shows how to save (and restore) an instance of your own class to clipboard.
AUTENTICAZIONE e SICUREZZA
Come lanciare un nuovo processo (windows forms) sotto un nomeutente specifico (stile servizio windows) per evitare di dover
fare impersonation.
Imperative and Declarative Security in .Net Framework.
Code Access Security. Esempio: il mio programma si trova in una directory di rete, vorrei permettere agli utenti di lavorarci senza
problemi di permessi o altro! Possibili soluzioni:
-
Deploy locale
-
Strong name
PERMISSION
A C# library containing wrapper classes for ACL, ACE, Security descriptors, Security Attributes, Access tokens, etc.
HOW TO: Programmatically Set NTFS File System Folder Permissions by Using Microsoft Visual Basic .NET.
Importing Security Components Using XML Files.
CRYPT / DECRYPT
Criptare stringhe tramite i crypto service.
Decriptare stringhe tramite i crypto service.
MISCELLANOUS
This article provides an overview for getting current and parent method name for logging purpose.
Installazione del framework v1.1 durante il setup di un programma.
Custom numeric format strings.
WEB SERVICE
Article about how reference parameters are implemented in web methods and how method overloading is achieved in webmethods.
Adding a Progress Bar to Your Web Service Client Application (how to intercept the Web service message stream using SOAP extensions).
*** Web Application ***
ASP.NET
Trick per il download dei files .config.
Esempio di elaborazione asincrona con pagina di attesa.