Alex's Weblog

Weblog di Ermanno Goletto (Codename Alex - A Learning EXperience)
posts - 438, comments - 4214, trackbacks - 294

My Links

News

Il blog è stato
trasferito al
 seguente link:


DevAdmin Blog

Add my blog to Live

Foto

Curriculum Vitae


Il contenuto di questo blog e di ciascun post viene fornito “così come é”, senza garanzie, e non conferisce alcun diritto. Questo blog riporta il mio personale pensiero che non riflette necessariamente il pensiero del mio datore di lavoro.

Logo Creative Commons Deed


Logo MCTS

Logo MCSA

Logo MCP

Logo Microsoft Certified Business Management Solutions Professional

Microsoft Certified Business Management Solutions Specialist


Logo UGIdotNET UGIdotNET Contributor


Logo UGISS UGISS Contributor


Logo SysAdmin.it SysAdmin.it Staff


Article Categories

Archives

Post Categories

Blogs

Database

Development

Friends

IT

Knowledge Base

Links

MBS

MCP

MVP Sites

User Groups

Virtualization

Code & Snippet

Esempi di codice e Snippet
Rilevare le istanze di SQL Server sulla rete

Ci sono vari metodi di farlo ad esempio usare SQL-DMO (SQL Server 2000) o meglio ancora SMO (SQL Server 2005). Ma questi due metodi prevedono di installare sui client le relative dll. Un altro modo invece è quello di usare MC-SQLR ovvero il SQL Server Resolution Protocol e quindi di inviare un pacchetto CLNT_BCAST_EX e analizzare i pacchetti di risposta   di risposta server SVR_RESP. Qui trovate un esempio Locate SQL Server instances on the local network, l'autore aveva analizzato il traffico di rete per capire come funzionava il protocollo ora con la pubblicazione delle specifiche dei protocolli Microsoft non è più necessario: MC-SQLR]:...

posted @ lunedì 16 giugno 2008 17:18 | Feedback (156) | Filed Under [ Links Code & Snippet Database ]

Ricavare i path di default per i file di dati e logs in SQL Server 2005

Una delle impostazioni che possibile fare su un'istanza di SQL Server è quella del percorso di default in cui memorizzare file dati e logs di un nuovo database. Ho fatto diverse ricerca, ma non trovato un modo semplice per ricavare tramite T-SQL tali informazioni. A quanto sembra se si modificano tali percorsi questi vengono memorizzati nelle chiavi di registry: HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultData HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultLog In caso contrario i path è quello specificato durante l'installazione per i File di dati quindi si può pensare di ricavarli dai path dei file mdf e ldf del database master. Di seguito uno...

posted @ giovedì 29 maggio 2008 22:50 | Feedback (29) | Filed Under [ Code & Snippet Database .NET Framework .NET Framework 2.0 ]

Autosizing delle righe di un DataGrid

A volte mi capita di dover mettere mano a codice .NET 1.1 su Visual Studio 2003 e in questa versione la griglia nativa il DataGrid non era ricco di funzionalità. L'ultima richiesta che mi è arrivata è come realizzare l'autosizing delle righe per vedere completamente il contenuto delle righe le cui colonne vano su più righe. Manualment la cosa è possibiole quindi la funzionalità in effetti c'è ma non è esposta e quindi occorre utilizzare la reflection come indicato in questo link http://www.syncfusion.com/FAQ/winforms/FAQ_c44c.aspx Di seguito la versione che ho realizzato: Private Sub AutoSizeRows(ByVal columnStyle As System.Windows.Forms.DataGridColumnStyle)   Dim dataGrid As System.Windows.Forms.DataGrid = columnStyle.DataGridTableStyle.DataGrid  ...

posted @ venerdì 16 maggio 2008 16:59 | Feedback (19) | Filed Under [ Links Code & Snippet .NET Framework ]

Script per leggere il numero seriale del computer

Lo script in se non è nulla di che nel senso basta utilizzare WMI per leggere la proprietà SerialNumeber della classe Win32_BIOS, inrealtà lo scopo di questo script è quello di creare una template per simili esigenze ovvero: Gestire script utilizzabili da riga di comando con possibilità di richiedere dati all'utente Utilizzare WMI Connettersi anche a computer remoti Visualizzare in forma tabellare i risultati Tutte queste esigenze di fatto sono semplicemente realizzabili se si utilizza l'oggetto Microsoft.CmdLib disponibile in Windows XP e Windows 2003 Server,...

posted @ giovedì 15 maggio 2008 16:42 | Feedback (164) | Filed Under [ Links Code & Snippet IT ]

Inviare mail tramite .NET 1.1 con Exchange 2003 e Exchange 2007

In questo articolo ho raccolto alcune riflessioni su come inviare mail tramite .NET Framework 1.1 e 2.0 utilizzando Exchange 2003 e Exchange 2007 analizzando le differenze relative alla gestione dell'autenticazione in .NET 1.1 e 2.0 e le modifiche apportate in Exchange 2007 rispetto a Exchange 2003.

posted @ mercoledì 9 aprile 2008 13:15 | Feedback (14) | Filed Under [ Code & Snippet Tips IT .NET Framework .NET Framework 2.0 ]

Script per comprimere un file

A volte in uno script amministrativo può essere necessario dover comprimere un file e in tal caso una possibilità è quella di usare le cartelle comprese presenti a partire da XP. [Update] Si tenga conto che Le cartelle compresse di XP hanno il limite di 4 GB Option Explicit Dim strScriptFullName, strCurrentPath, strZipFilePath, strAddFilePath strScriptFullName = wscript.scriptfullname strCurrentPath = Left(strscriptfullname, InStrRev(strScriptFullName, "\")) strZipFilePath = strCurrentPath & "test.zip" strAddFilePath = strCurrentPath & "test.txt" 'Crea un file zip vuoto If CreateEmptyZip(strZipFilePath) Then   'Aggiunge un file all'archivio zip   Call AddFile2Zip(strZipFilePath, strAddFilePath) End If Function CreateEmptyZip(strZipFilePath)   On Error Resume Next   'Apertura file in scrittura   Dim objFso, objFile   Const ForWriting = 2   Set objFso = CreateObject("Scripting.FileSystemObject")  ...

posted @ giovedì 31 gennaio 2008 16:11 | Feedback (123) | Filed Under [ Code & Snippet IT ]

Section VirtualEarth per MWPSK (My Web Pages Start Kit)

Mi sono cimentato nella realizzazione di una Sezione per MWPSK che mi permettesse di realizzare la funzionalità "Dove siamo"/"Where we are" presente nella maggior parte siti in modo più dinamico tramite una mappa di Virtual Earth. La scelta è caduta su una Section perchè rispetto agli Easy Control permettono di avere dei dati di configurazione che possono essere poi salvati anche se l'implementazione di una Section è maggiormente complessa rispetto a quella di un Easy Control. In questo modo però è posiibile dare all'utente la possibilità di configurare la mappa consentendo la possibiltà di inserire latitudine e longitudine del centro mappa,...

posted @ giovedì 13 settembre 2007 01:12 | Feedback (125) | Filed Under [ Links Code & Snippet .NET Framework 2.0 ASP ]

String.Format e i valori Boolean

Leggendo questo post di Corrado mi è venuto in mente un modo per formattare i valori booleani partendo dal fatto che CInt(True ) è -1 e CInt(False) è 0: String.Format("Il valore è {0:Falso;Vero}.",CInt(booleanValue))

posted @ lunedì 20 agosto 2007 02:44 | Feedback (12) | Filed Under [ Code & Snippet .NET Framework .NET Framework 2.0 ]

Preview di uno Screensaver in un oggetto container

Per fare il preview di uno Screensaver in un oggetto container è possibile utilizzare il parametro /p dello stesso. Di seguito il codice per visualizzare uno Screensaver in una PictureBox: Private Const ScreenSaverName As String = "ssbezier.scr"Private screenSaverProcess As System.Diagnostics.Process Dim startInfo As New System.Diagnostics.ProcessStartInfostartInfo.Arguments = "/p " & Me.PictureBox1.Handle.ToString()startInfo.FileName = ScreenSaverNamestartInfo.UseShellExecute = FalsescreenSaverProcess = System.Diagnostics.Process.Start(startInfo) Per arrestare la visualizzazione dello Screensaver basterà terminare il processo:screenSaverProcess.Kill()screenSaverProcess.Close()screenSaverProcess.Dispose()

posted @ mercoledì 8 agosto 2007 22:18 | Feedback (3) | Filed Under [ Code & Snippet .NET Framework .NET Framework 2.0 ]

Ricavare la porta di una stampante

Per ricavare la porta di una stampante in VS 2003 è possibile utilizzare WMI e in particolare la classe Win32_Printer : Public Shared Function GetPrinterPortName(ByVal printerName As String) As String     Dim portName As String = String.Empty     Dim path As String = String.Format("Win32_Printer.DeviceID='{0}'", printerName)     Dim p As New System.Management.ManagementObject(path)      p.Get()     portName = p("PortName").ToString()     p.Dispose() : p = Nothing     Return portNameEnd Function Per utilizzare il codice occcore aggiungere un reference a System.Management. In VS 2005 non ho trovato funzionalità native per ricavare la porta della stampante anche se inizialmente era previsto un My.Computer.Printers come si può leggere nel seguente articolo http://msdn.microsoft.com/msdnmag/issues/04/05/VisualBasic2005/ ma nella versione definitiva pare non sia poi stato implementato chissà se conteneva...

posted @ mercoledì 21 febbraio 2007 17:44 | Feedback (8) | Filed Under [ Links Code & Snippet .NET Framework .NET Framework 2.0 ]

Comportamento anomalo su chiusura form in VS 2003

Nel caso in cui si abbia un pulsante che chuiude la form e e quando lo si seziona una validate di un controllo fallisce la form non verrà chiusa anche nel caso in cui sul pulsante si sia impostato CausesValidation = False. Io ho risolto inserendo nel click del pulsante il seguente codice:         For Each cnt As System.Windows.Forms.Control In Me.Controls            cnt.CausesValidation = False        Next        Me.CausesValidation = False         Me.Close() Lo stesso comportamento lo si riscontra anche se si tenta di chiudere la form con il pulsante di chiusura di sustema (X rossa), a tal proposito si veda il seguente:A control's Validating event is...

posted @ martedì 13 febbraio 2007 18:52 | Feedback (8) | Filed Under [ Links Code & Snippet .NET Framework ]

WSUS e SID duplicati

Nel caso in cui nella rete si abbiano computer con SID identici, dovuto al fatto che l'installazione è stata fatta partendo da un'identica immagine tramite tool tipo Ghost qunado si installa WSUS si riscontreranno malfunzionamenti dovuti al fatto che le patch verranno distribuite solo ad una macchina in quanto WSU non sarà in grado di distinguerle. A tal proposito si legga il seguente Attack of the Clones. Se ci si trova in questa situazione occorrerà cabiare il SID alle macchine con strumenti quali Sysprep o Newsid e quindi eliminare i SID duplicati in WSUS e a questo proposito si veda Delete Duplicate SUS...

posted @ giovedì 1 febbraio 2007 13:59 | Feedback (45) | Filed Under [ Links Code & Snippet IT .NET Framework ]

Ricavare gli indirizzi IP di un Host tramite WMI e VbScript

Dim wmiQuery, objWMIService, objPing, objStatus      wmiQuery = "Select * From Win32_PingStatus Where Address = 'HostName'"      Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set objPing = objWMIService.ExecQuery(wmiQuery)      For Each objStatus In objPing If objStatus.StatusCode = 0 Then     msgbox(objStatus.ProtocolAddress) Else     msgbox("Unreachable") End If Next Set wmiQuery = Nothing Set objWMIService = Nothing Set objPing = Nothing Set objStatus = Nothing Ovviamente il codice può essere trasportato anche in applicazioni .NET UPDATE:Come detto da Marco Minerva nel suo post:http://blogs.ugidotnet.org/marcom/archive/2007/01/25/68646.aspx Se la necessità è solo quella di ricavare gli indirizzi IP il .NET Framework offre nativamente la classe  System.Net.DNS.GetHostEntry Se invece l'esigenza è di taglio più sistemistico e...

posted @ giovedì 25 gennaio 2007 18:32 | Feedback (1) | Filed Under [ Code & Snippet ]

Gestione dell'ora legale

Se nelle operazioni fra date è necessario tenere conto dell'ora legale è possibile utilizzare il metodo ToLocalTime: Si veda il seguente codice: Dim date1 As DateTime = #10/29/2006 2:00:00 AM# Console.WriteLine(date1.AddHours(2))Console.WriteLine(date1.AddHours(2).ToLocalTime) Output:29/10/2006 4.00.0029/10/2006 5.00.00 Per sapere se una data cade nel periodo dell'ora legale è possibile utilizzare il metodo System.TimeZone.CurrentTimeZone.IsDaylightSavingTime Si veda il seguente codice: Dim date1 As Date = #10/28/2006 2:00:00 AM#Dim date2 As Date = #10/29/2006 4:00:00 AM# Console.WriteLine(System.TimeZone.CurrentTimeZone.DaylightName)Console.WriteLine(System.TimeZone.CurrentTimeZone.GetDaylightChanges(2006).Start)Console.WriteLine(System.TimeZone.CurrentTimeZone.GetDaylightChanges(2006).End) Console.WriteLine(System.TimeZone.CurrentTimeZone.IsDaylightSavingTime(date1))Console.WriteLine(System.TimeZone.CurrentTimeZone.IsDaylightSavingTime(date2)) Output:ora solare Europa occidentale26/03/2006 2.00.0029/10/2006 3.00.00TrueFalse

posted @ venerdì 12 gennaio 2007 13:16 | Feedback (4) | Filed Under [ Code & Snippet .NET Framework .NET Framework 2.0 ]

Gestione NullValue per ComboBox "bindati"

Il .NET Framework 2.0 ha migliorato la gestione del binding e tramite queste nuove funzionalità è possibile gestire il valore nullo sui ComboBox i cui valori sono gestiti tramite binding su una DataTable, ma il cui SelectedValue può dove gestire il valore nullo.Un modo per risolvere questo problema può essere quello di aggiungere sulla DataTable che contiene i valori per il ComboBox una DataRow  per la gestione del valore nullo. Sia ad esempio ComboBoxSourceDataTable la DataTable che contiene i valori del ComboBox avente due colonne ID (Int32) e Descrizione (String). Ipotizzando che il valore int32.MinValue per ID sia un valore al di...

posted @ mercoledì 15 novembre 2006 19:47 | Feedback (136) | Filed Under [ Code & Snippet .NET Framework 2.0 ]

Persistere il valori di una proprietà custom di una DataGridViewColumn custom

Dovendo realizzare una DataGridViewColumn di tipo MaskedTextBox e NumericUpDown ho fatto un salto su Msdn dove ho trovato questo esempio per colonne MaskedTextBox: DataGridView Custom Column Sample  http://msdn2.microsoft.com/en-us/library/ms180996.aspx tutto bene ma quando da IDE di tenta di impostare le proprietà custom il valore non viene memorizzato. Dopo aver letto questo thread su Microsoft Connect:DataGridView Column Editor code generation issue http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=108961stavo quasi per considerarlo un bug, ma ne ero veramente poco convinto, infatti sulle colonne native del framework non ci sono problemi. Poi ho provato questo esempio:Sviluppo di una cella e colonna NumericUpDown personalizzate per il controllo DataGridViewhttp://www.microsoft.com/italy/msdn/library/framework/winf_numericupdown.mspxe qui il problema non si presentava e...

posted @ giovedì 12 ottobre 2006 15:08 | Feedback (1) | Filed Under [ Code & Snippet .NET Framework 2.0 ]

Il metodo PrintToPrinter di Crystal Report VS 2003 e salti pagina non desiderati

In questo periodo ho creato un'applicazione per un magazzino che si occupava di stampare un etichetta per ogni pesatura effetuata da un operatore.Quindi ho creato un report con intestazione e dettaglio disabilitando le altre sezioni e utilizzando un DataSet come fonte dati, il tutto in ambiente VS 2003.Siccome sul pc era presente solo la stampante per le etichette mi è venuto naturale aggiungere alla form il report e usare il metodo PrintToPrinter per stamparlo.Il problema era che venivano eseguiti salti pagina non impostati dopo la stampa dell'etichetta.Per risolvere il problema ho usato il seguente codice:        Me.rptEtichetta.Close()        Me.rptEtichetta.SetDataSource(Nothing)        Me.rptEtichetta.SetDataSource(Me.dstEtichetta)        Me.rptEtichetta.PrintToPrinter(1, False,...

posted @ domenica 17 settembre 2006 15:48 | Feedback (3) | Filed Under [ Code & Snippet .NET Framework ]

Forzare un refresh hardware via codice

In questo post Rilevazione modifiche hardware avevo già affrontato questo problema valutando quali soluzioni venivano offerte da un punto di vista sistemistico.In questi giorni però ho avuto l'esigenza di forzare la rilevazione hardware via codice e dopo aver letto questo articolo della KB: How To Force Reenumeration of a Device Tree From an Application ne ho realizzato una versione in VB.NET 2005.Se vi può servire la trovate qui: MyRefreshHW2005

posted @ martedì 5 settembre 2006 09:58 | Feedback (4) | Filed Under [ Links Code & Snippet .NET Framework 2.0 ]

Elencare i print job tramite WMI

Uno snippet per i print job in corso. Dim path As New System.Management.ManagementPath("root\cimv2")Dim options As New System.Management.ConnectionOptions 'Local Hostpath.Server = "." 'Remote Host'path.Server = "ServerName"'options.Username = "DomainName\UserName"'options.Password = "UserPassword" Dim scope As New System.Management.ManagementScope(path, options)Dim query As New System.Management.ObjectQuery( _       "SELECT Name, Document, JobStatus, Owner, TotalPages, Size, TimeSubmitted FROM Win32_PrintJob")Dim search As New System.Management.ManagementObjectSearcher(scope, query)Dim objectCollection As System.Management.ManagementObjectCollection objectCollection = search.Get() Dim printerName, document, owner As StringDim pages, size As System.UInt32Dim timeSubmitted As DateTimeFor Each prntJob As System.Management.ManagementObject In objectCollection       printerName = prntJob("Name").ToString().Split(","c)(0)       document = prntJob("Document").ToString()       owner = prntJob("Owner").ToString()       pages = System.Convert.ToUInt32(prntJob("TotalPages"))       size = System.Convert.ToUInt32(prntJob("Size"))       timeSubmitted = System.Management.ManagementDateTimeConverter.ToDateTime( _                prntJob("TimeSubmitted").ToString())        Console.WriteLine("Printer: " & printerName)       Console.WriteLine("Document: " & document)       Console.WriteLine("Owner: " & owner)       Console.WriteLine("Pages: " &...

posted @ mercoledì 23 agosto 2006 13:29 | Feedback (48) | Filed Under [ Links Code & Snippet ]

Nascondere la visualizzazione delle sottoproprietà

Creando controlli o componenti custom capita di creare proprietà che referenzino oggetti e in molti casi si vorrebbe evitare di vedere le proprietà di questi oggetti. In questi casi basta applicare alla proprietà il seguente attributo:<System.ComponentModel.TypeConverter(GetType(System.ComponentModel.ReferenceConverter))> _Public Property MyConfirmButton() As System.Windows.Forms.Button

posted @ mercoledì 26 luglio 2006 20:01 | Feedback (1) | Filed Under [ Code & Snippet ]

Impostare l'attributo di un file tramite script

In DOS esiste il pratico comando ATTRIB:http://www.microsoft.com/technet/prodtechnol/windowsserver2003/it/library/ServerHelp/56202570-64a8-424b-8a11-09f5b8584cab.mspx?mfr=true In WSH invece è possibile ricorrere ad un codice del tipo che imposta l'attributo Archive per un singolo file o per tutti i file in una directory e relative subdirectory: WSH.echo ToggleArchiveBit("F:\test.txt") SetArchiveBit("F:\Test") Function ToggleArchiveBit(filePath)  Set objFSO = CreateObject("Scripting.FileSystemObject")  Set objFile = objFSO.GetFile(filePath)  If objFile.Attributes And 32 then       objFile.Attributes = objFile.Attributes XOR 32       ToggleArchiveBit = "Archive bit is cleared."  Else       objFile.Attributes = objFile.Attributes XOR 32       ToggleArchiveBit = "Archive bit is set."  End If End Function Function SetArchiveBit(Path)  Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(Path) Set colSubfolders = objFolder.Subfolders For Each objSubfolder in...

posted @ mercoledì 12 luglio 2006 15:57 | Feedback (2) | Filed Under [ Links Code & Snippet ]

Ricavare l'icona associata ad un file

Con il .NET Framework 1.0 e 1.1 un modo era ricorrere all'api SHGetFileInfo come descritto nel seguente:http://support.microsoft.com/kb/319340/en-us Con l'introduzione del metodo ExtractAssociatedIcon del .Net framework 2.0 è possibile ottenere lo stesso risultato tramite l'utilizzo del registry evitando così l'utilizzo di PInvoke:     Public Shared Function GetFileExtensionIcon(ByVal fileExtension As String) As System.Drawing.Icon        Dim defaultIconFile As String = Nothing         Dim keyExtension As Microsoft.Win32.RegistryKey         keyExtension = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey("." & fileExtension)         If keyExtension IsNot Nothing Then            'Lettura program name            Dim programName As String            programName = keyExtension.GetValue(String.Empty).ToString             'Lettura program default icon            Dim keyProgramDefaultIcon As Microsoft.Win32.RegistryKey            keyProgramDefaultIcon = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey( _                programName & "\DefaultIcon")             If keyProgramDefaultIcon IsNot Nothing Then                Dim...

posted @ mercoledì 14 giugno 2006 13:28 | Feedback (1) | Filed Under [ Links Code & Snippet .NET Framework .NET Framework 2.0 ]

Dispose di componenti in form

Oggi avevo bisogno di usare in una form una DataTable e volevo che alla dispose della form venisse fatta anche la dispose della DataTable e tra me ho pensato potrei usare un DataSet che posso aggiungere come un componente e che verrà quindi aggiunto alla collezione components e alla Dispose della form verrà rilasciato visto che il codice generato per la dispose della form è il seguente:         'Form overrides dispose to clean up the component list.        Protected Overrides Sub Dispose(ByVal disposing As Boolean)            If disposing AndAlso components IsNot Nothing Then                components.Dispose()            End If            MyBase.Dispose(disposing)        End Sub Peccato che la quando viene...

posted @ venerdì 9 giugno 2006 12:38 | Feedback (2) | Filed Under [ Code & Snippet .NET Framework .NET Framework 2.0 ]

Nuovi editor in .NET 2.0

Il .NET framework 2.0 ha aggiunto alcuni nuovi editor, ad esempio ora esiste un editor per stringe di connessione (seppur minimalistico) di seguito un'esempio per utilizzarlo: ''' <summary>''' Stringa di connessione.''' </summary>''' <value></value>''' <returns></returns>''' <remarks></remarks><System.ComponentModel.Editor("System.Web.UI.Design.ConnectionStringEditor, System.Design", GetType(System.Drawing.Design.UITypeEditor)), _System.ComponentModel.Description("Stringa di connessione."), _System.ComponentModel.DefaultValue("")> _Public Property ConnectionString As String Al seguente link un'elenco di editor che ereditano da UITypeEditor:http://msdn2.microsoft.com/it-it/library/bfc7teys.aspx

posted @ giovedì 25 maggio 2006 12:14 | Feedback (6) | Filed Under [ Code & Snippet .NET Framework 2.0 ]

Modificare il comportamento di una proprietà dinamicamente

Siccomme a volte capita di dover implementare l'interfaccia System.ComponentModel.ICustomTypeDescriptor e creare un PropertyDescriptor Custom per rendere dinamico il comportamento di proprietà mi sono fatto un esempio da cui partire che rende una proprietà ReadOnly o meno sulla basa del valore di una seconda proprietà. http://blogs.ugidotnet.org/alexblog/articles/41383.aspx L'esempio è in VB.NET 2005, ma il codice funziona anche con le versioni precedenti del framework.

posted @ martedì 23 maggio 2006 19:11 | Feedback (5) | Filed Under [ Code & Snippet .NET Framework 2.0 ]

.NET 2.0 Autenticarsi ad un Server Smtp per inviare una mail

Il framework 2.0 ha introdotto il nuovo namespace System.Net.Mail per inviare posta tramite il protocollo SMTP. Per gestire l'autenticazione verso un SMTP occorre instaziare un oggetto System.Net.NetworkCredential come mostrato nel seguente esempio che invia una mail utilizzando l'SMTP di Virgilio: Dim message As New System.Net.Mail.MailMessage("mailfrom@dom.it", "mailto@virgilio.it", "Obj", "Body")Dim client As New System.Net.Mail.SmtpClient("out.virgilio.it")client.Credentials = New System.Net.NetworkCredential("mailto@virgilio.it", "password")client.Send(message)message.Dispose()

posted @ venerdì 19 maggio 2006 17:23 | Feedback (3) | Filed Under [ Code & Snippet .NET Framework 2.0 ]

Distinguere come è avvenuta la chiusura di un form

Il post è stato trasformato in Tip ed è disponibile al seguente link:http://www2.ugidotnet.org/tips/tips_read.aspx?ID=173

posted @ giovedì 27 aprile 2006 16:53 | Feedback (19) | Filed Under [ Code & Snippet .NET Framework .NET Framework 2.0 ]

Copiare nella clipboard il contento di un DataTable per incollarlo in un foglio di Excel

Per poter incollare su Excel basta che i dati siano separati da tabulazione e al termine di ogni riga vi sua un NewLine. Dim sb As New System.Text.StringBuilderFor Each row As System.Data.DataRow In ds.MyTable.Rows    For Each column As System.Data.DataColumn In ds.MyTable.Columns        sb.Append(row(column))        sb.Append(ControlChars.Tab)    Next    sb.Append(ControlChars.NewLine)NextClipboard.SetDataObject(sb.ToString) Ovviamente l'idea puo essere poi estesa per copiare ad esempio le righe selezionate di una DataGrid o GridView in un foglio di Excel.

posted @ venerdì 17 marzo 2006 20:18 | Feedback (5) | Filed Under [ Code & Snippet ]

Ottenere l'elenco dei database Navision su un'istanza SQL Server (Review)

Se si osserva il comportamente del client di Navison quando apre un database SQL Server si nota che vengono visualizzati solo i database di Navision a cui si può accedere con le credenziali fornite e non tutti quelli dell'istanza.Questo ci porta a fare la considerazione che il controllo viene fatto fatto sul database dove infatti troviamo la tabella $ndo$dbproperty che contiene un solo record con le informazioni di Navision (ad esempio nella colonna databaseversionno troviamo la versione). Quindi per ottenere l'informazione possimao ricavare l'elenco dei database a cui si ha diritto di accedere con le credenziali fornite e controllare poi l'esistenza...

posted @ venerdì 10 febbraio 2006 17:49 | Feedback (5) | Filed Under [ Code & Snippet Navision Database ]

Ottenere Versione e Path del client di Navision installato

Queste informazioni sono reperibili tramite la seguente chiave di registro:HKEY_LOCAL_MACHINE\SOFTWARE\Navision\Microsoft Business Solutions-Navision Questa chiave ha una sottochiave che rappresenta la versione installata (xes W1 4.00) che a sua volta contiene un valore Path che rapprasenta il percorso in cui è stato installato il client di Navision Di seguito il codice per ottenere le informazioni in VB.Net:     Public Shared Function GetNavisionVersion() As String        Dim value As String = String.Empty         Try            Dim key As Microsoft.Win32.RegistryKey            key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey( _                          "SOFTWARE\Navision\Microsoft Business Solutions-Navision", False)             value = key.GetSubKeyNames()(0)        Catch ex As Exception            Throw New System.ApplicationException("Navision Client is not installed.", ex)        End Try         Return value    End Function    ...

posted @ mercoledì 8 febbraio 2006 15:51 | Feedback (2) | Filed Under [ Code & Snippet Navision ]

Modificare le Settings con scope Application

Usando VS 2005 ho potuto apprezzare il lavoro fatto per quanto riguarda la gestione dei settings dell'applicazione che ora hanno due scope quello Application (solo read only nel senso che occorre modificare il file config) e quello User.Il problema però è che i TableAdapter utilizzano una stringa di connessione memorizzata nei settings, ma con scope Application quindi a runtime non è possibile modificare la stringa di connessione (tra l'altro a quanto pare non è possibile inserire nei settings una Connection String che abbia lo scope User confermate?). Un modo per modificare la stringa di connessione lo trovate qui http://blogs.msdn.com/smartclientdata/archive/2005/07/25/443034.aspx e consiste...

posted @ mercoledì 14 dicembre 2005 20:05 | Feedback (7) | Filed Under [ Code & Snippet .NET Framework 2.0 ]

Scaricare un file da una pagina web

Private Sub DownloadFile(ByVal url As String, ByVal filePath As String)      Dim webRequest As System.Net.WebRequest = System.Net.HttpWebRequest.Create(url)     Dim webResponse As System.Net.WebResponse = webRequest.GetResponse()     Dim inputStream As System.IO.Stream = webResponse.GetResponseStream()      Dim buffer(CInt(webResponse.ContentLength) - 1) As Byte     inputStream.Read(buffer, 0, buffer.Length)      inputStream.Close()     webResponse.Close()     inputStream = Nothing     webResponse = Nothing     webRequest = Nothing      Dim fileStream As New System.IO.FileStream(filePath, IO.FileMode.CreateNew)     Dim outputStream As New System.IO.BinaryWriter(fileStream)      outputStream.Write(buffer)      buffer = Nothing     outputStream.Close()     fileStream.Close()     outputStream = Nothing     fileStream = Nothing End Sub

posted @ venerdì 18 novembre 2005 19:40 | Feedback (1) | Filed Under [ Code & Snippet .NET Framework ]

Come ricavare il colore del pixel puntato dal mouse

E' stato pubblicato un'articolo sulla KB per realizzare la feature in oggetto in C# che fa uso di PInvoke: How to use Visual C# to obtain the color of the pixel that is referenced by the mouse pointerhttp://support.microsoft.com/default.aspx?scid=kb;en-us;892462

posted @ martedì 15 novembre 2005 10:14 | Feedback (1) | Filed Under [ Links Code & Snippet .NET Framework ]

Avviare il Visualizzatore immagini e fax per Windows

Il Visualizzatore immagini e fax per Windows non è un'eseguibile bensì una funzionalità contenuta nella dll shimgvw.dll.Infatti se tramite Opzioni Cartella andiamo a vedere quale applicazione viene aperta quando in espora risorse facciamo doppio click su un file immagine notiamo che viene utilizzata la seguente:rundll32.exe C:\WINDOWS\System32\shimgvw.dll,ImageView_Fullscreen %1 Quindi possimao scrivere un codice di questo tipo per aprire un'immagine tramite il Visualizzatore: Dim p As New System.Diagnostics.Processp.StartInfo.FileName = "rundll32.exe"p.StartInfo.Arguments = System.IO.Path.Combine(System.Environment.SystemDirectory, "shimgvw.dll")p.StartInfo.Arguments &= ",ImageView_Fullscreen"p.StartInfo.Arguments &= " E:\MyImg.gif"p.StartInfo.UseShellExecute = Falsep.StartInfo.Verb = "open"p.Start() Analogamente è possibile stampare su una stampate a scelta: Dim p As New System.Diagnostics.Processp.StartInfo.FileName = "rundll32.exe"p1.StartInfo.Arguments = System.IO.Path.Combine(System.Environment.SystemDirectory, "shimgvw.dll")p.StartInfo.Arguments &= ",ImageView_PrintTo /pt"p.StartInfo.Arguments &= "...

posted @ martedì 11 ottobre 2005 20:45 | Feedback (8) | Filed Under [ Code & Snippet .NET Framework ]

KB Come utilizzare la NotifyIcon

How to use the Windows Forms NotifyIcon component in Visual Basic .NET to display an icon for an application in the notification areahttp://support.microsoft.com/?scid=kb;en-us;903898

posted @ lunedì 3 ottobre 2005 10:00 | Feedback (3) | Filed Under [ Links Code & Snippet .NET Framework ]

Implementazione del Ping

Dalla Knowbase ecco un paio di soluzioni su come implementare il ping How to ping an IP address by using sockets in Visual Basic .NEThttp://support.microsoft.com/default.aspx?scid=kb;en-us;828993 HOW TO: Ping an IP address with Visual Basic by using ICMP http://support.microsoft.com/kb/300197/

posted @ venerdì 30 settembre 2005 20:38 | Feedback (1) | Filed Under [ Links Code & Snippet ]

Microsoft Download 26-08-2005

Enterprise SOA Application Demo Discover an SOA solution that uses InfoPath, BizTalk, ASP.NET Web Services, RPG on an AS/400, CICS on a Mainframe, J2EE on WebSphere, Pocket PC, SQL Server, Speech Server, and MOM (8/19/2005). Microsoft Electronic Product Code...

posted @ martedì 30 agosto 2005 15:42 | Feedback (222) | Filed Under [ Links Code & Snippet Security IT ]

Creare una share di rete tramite WMI

Tramite il seguente codice è possibile creare una share di rete senza fare ricorso alle Api (ovviamente con performance minori rispetto a quest'ultime).I sistemi operativi supportati sono: Windows Server 2003 Windows XP Windows 2000 Professional/Server Windows NT Workstation/Server 4.0 SP4 e successivi Dim path As New System.Management.ManagementPath("Win32_Share")Dim share As New System.Management.ManagementClass(Nothing, path, Nothing) Dim inArgs As System.Management.ManagementBaseObjectinArgs = share.GetMethodParameters("Create")inArgs("Path") = "C:\MyFolder"inArgs("Name") = "ShareName" '"ShareName$" for hide shareinArgs("Type") = 0inArgs("MaximumAllowed") = NothinginArgs("Description") = Nothing Dim outArgs As System.Management.ManagementBaseObjectoutArgs = share.InvokeMethod("Create", inArgs, Nothing) inArgs.Dispose() : inArgs = NothingoutArgs.Dispose() : outArgs = Nothingshare.Dispose() : share = Nothingpath = Nothing Per maggiori info sul metodo create della...

posted @ martedì 30 agosto 2005 10:51 | Feedback (2) | Filed Under [ Code & Snippet IT .NET Framework ]

Caricare un PictureBox con un file utilizzando un MemoryStream

Caricando il PictureBox utilizzando un MemoryStream si evita di tenere bloccato il file. 'Caricamento file nel BufferDim fs As New System.IO.FileStream("E:\Test.bmp", IO.FileMode.Open, IO.FileAccess.Read)Dim buffer(CInt(fs.Length) - 1) As Byte fs.Read(buffer, 0, CInt(fs.Length))fs.Close() : fs = Nothing 'Caricamento Buffer nel MemoryStreamDim ms As New System.IO.MemoryStream(buffer)buffer = Nothing 'Lettura immagine da MemoryStreamMe.PictureBox1.Image = System.Drawing.Image.FromStream(ms)

posted @ martedì 12 luglio 2005 18:11 | Feedback (2) | Filed Under [ Code & Snippet .NET Framework ]

Elencare gli applicativi installati tramite WMI

Uno snippet per elencare gli applicativi installati su un pc. Dim path As New System.Management.ManagementPath("root\cimv2")Dim options As New System.Management.ConnectionOptions 'Local Hostpath.Server = "." 'Remote Host'path.Server = "ServerName"'options.Username = "DomainName\UserName"'options.Password = "UserPassword" Dim scope As New System.Management.ManagementScope(path, options)Dim query As New System.Management.ObjectQuery("SELECT * FROM Win32_Product")Dim search As New System.Management.ManagementObjectSearcher(scope, query)Dim objectCollection As System.Management.ManagementObjectCollection objectCollection = search.Get() For Each myObject As System.Management.ManagementObject In objectCollection       Console.WriteLine(myObject.GetPropertyValue("Caption"))Next

posted @ venerdì 1 luglio 2005 19:02 | Feedback (1) | Filed Under [ Code & Snippet .NET Framework ]

Modificare il nome della proprietà visualizzato nel PropertyGrid

Nel il framework .Net 2.0 è stato aggiunto l'attributo  DisplayName che permette di personalizzare la visualizzazione del nome della proprietà. Public Class MySettings    Private DataFilePathValue As String     <system.componentmodel.DisplayName("Path file dati")> _    <system.ComponentModel.Description("Path del file utilizzato per memorizzare i dati.")> _    Public Property DataFilePath() As String        Get            Return Me.DataFilePathValue        End Get        Set(ByVal value As String)            Me.DataFilePathValue = value        End Set    End Property End Class

posted @ venerdì 13 maggio 2005 16:31 | Feedback (2) | Filed Under [ Code & Snippet Tips .NET Framework 2.0 ]

Label traparente su Picturebox

Se posizioniamo una Label su una Picturebox e impostiamo la proprietà BackColor della Label a System.Drawing.Color.Transparent per renderla traparente notiamo che non diventa trasparente rispetto alla Picturebox. Il motivo di questo comportamento lo troviamo su MSDN Proprietà Control.BackColor: La proprietà BackColor non supporta i colori trasparenti a meno che il bit di stile di ControlStyles.SupportsTransparentBackColor non sia impostato su true. La proprietà BackColor è una proprietà di ambiente. Una proprietà di ambiente è una proprietà di un controllo che, se non impostata, viene recuperata dal controllo padre. Per impostazione predefinita, a un controllo Button sarà associata, ad esempio, la stessa proprietà BackColor del controllo...

posted @ venerdì 29 aprile 2005 12:52 | Feedback (3) | Filed Under [ Code & Snippet Tips .NET Framework ]

Sincronizzare lo scroll orizzontale di due DataGrid

Per sincronizzare  lo scroll orizzontale di due Datagrid si può utilizzare la Reflection per accedere alla proprietà Friend del DataGrid HorizontalOffset. Il trucco sta nel ricavare nell'evento Scroll del primo DataGrid il relativo valore di HorizontalOffset e impostarlo sulla seconda DataGrid: Private Sub DataGrid1_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Scroll        Dim horizontalOffset1 As System.Reflection.PropertyInfo        horizontalOffset1 = Me.DataGrid1.GetType().GetProperty("HorizontalOffset", _              System.Reflection.BindingFlags.NonPublic Or _              System.Reflection.BindingFlags.GetProperty Or _              System.Reflection.BindingFlags.Instance)        Dim horizontalOffset2 As System.Reflection.PropertyInfo        horizontalOffset2 = Me.DataGrid2.GetType().GetProperty("HorizontalOffset", _              System.Reflection.BindingFlags.NonPublic Or _              System.Reflection.BindingFlags.GetProperty Or _              System.Reflection.BindingFlags.Instance)        horizontalOffset2.SetValue(Me.DataGrid2, _              horizontalOffset1.GetValue(Me.DataGrid1, Nothing), Nothing) End Sub

posted @ venerdì 22 aprile 2005 20:19 | Feedback (2) | Filed Under [ Code & Snippet .NET Framework ]

Textbox multiline e metodo AppendText

Se il Textbox ha la proprietà Multiline =True le seguenti due righe di codice presentano una differenza: Me.TextBox1.Text &= "Riga di test " & index & ControlChars.NewLine Me.TextBox1.AppendText("Riga di test " & index & ControlChars.NewLine) Il metodo AppendText fa in modo che il Textbox visualizzi sempre la parte finale del testo gestendo in automatico lo scroll.

posted @ domenica 27 marzo 2005 15:16 | Feedback (2) | Filed Under [ Code & Snippet .NET Framework ]

Attributo ToolboxBitmap implementato automaticamente

Da prove effettuate pare se si crea un componente/controllo e poi una bitmap (16 x 16 16 colori) con lo stesso nome del controllo/componente questa viene attribuita come ToolboxBitmap anche senza utilizzare l'attributo ToolboxBitmap.Nel caso il controllo sia in un Namespace (interno di quello di root) basta dare rinominare la bitmap come:Namespace.NomeControlloComponente.bmp

posted @ giovedì 24 marzo 2005 13:46 | Feedback (4) | Filed Under [ Code & Snippet ]

Connetteri all'SMTP di Virgilio e Libero tramite System.Web.Mail

Mi annoto per futura memoria le istruzione per connettersi all'SMTP Server di Virgilio e Libero tramite System.Web.Mail. Il trucco sta nell'impostare la collezione Fields dell'oggetto MailMessage utilizzando i corretti valori del field smtpauthenticate di cui riporto il significato:0=Perform no authentication1=Use the basic (clear text) authentication mechanism2=Use the NTLM authentication mechanism Connessione a Virgilio:Dim mail As New System.Web.Mail.MailMessageSystem.Web.Mail.SmtpMail.SmtpServer = "out.virgilio.it"mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "0") Richiede l'impostazione esplicita della connessione senza autenticazione. Connessione a Libero:Dim mail As New System.Web.Mail.MailMessageSystem.Web.Mail.SmtpMail.SmtpServer = "mail.libero.it" mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "0") Oppure mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1")mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "user@libero.it")mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "password") Richiede l'impostazione esplicita della connessione senza autenticazione oppure la connessione autenticata.

posted @ martedì 22 marzo 2005 17:34 | Feedback (3) | Filed Under [ Code & Snippet ]

Le insidie del DirectCast

Oggi mentre stavo scrivendo del codice per caricare un ListView mi sono imbattuto in un errore (mio sia ben chiaro) subdolo (almeno per me). Per velocizzare il caricamento del listview mi ero creato un arraylist contenente gli item da aggiungenre e per aggiugerli al ListView ho usato il metodo AddRange: Me.lsvMain.Items.AddRange(DirectCast(items.ToArray(), System.Windows.Forms.ListViewItem())) Risultato un errore a runtime di Invalid Cast.Ed è vero perche il metodo ToArray restituisce un array di Object quindi la DirectCast non può funzionare. Ciò che è strano però è che neppure il CType funziona: Me.lsvMain.Items.AddRange(CType(items.ToArray(), System.Windows.Forms.ListViewItem())) A questo punto la soluzione è stata quella di utilizzare un override della ToArray Me.lsvMain.Items.AddRange(DirectCast(items.ToArray(GetType(System.Windows.Forms.ListViewItem)), System.Windows.Forms.ListViewItem()))

posted @ mercoledì 9 marzo 2005 18:51 | Feedback (1) | Filed Under [ Code & Snippet ]

Articolo sui Windows Hooks

Su Ugi è stato pubblicato un mio articolo sui Windows Hooks.http://www.ugidotnet.org/articles/articles_read.aspx?ID=94 Nell'articolo ho inserito anche una classe per un'utilizzo più agevole degli hooks. Un grazie a Raffaele Rialdi per avermi rivelato alcuni retroscena.

posted @ venerdì 7 gennaio 2005 13:57 | Feedback (1) | Filed Under [ Code & Snippet ]

DataGrid Single Selection

Come molti di voi sapranno per far sì che sul DataGrid si possa selezionare una sola riga si ricorre spesso alla soluzione reperibile su Syncfusion.com di cui riporto di seguito il codice: Public Class MyDataGrid   Inherits DataGrid    Private oldSelectedRow As Integer    Protected Overloads Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)       'don't call the base class if left mouse down       If (e.Button <> MouseButtons.Left) Then          MyBase.OnMouseMove(e)       End If   End Sub    Protected Overloads Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)      'don't call the base class if in header      Dim hti As DataGrid.HitTestInfo      hti = Me.HitTest(New Point(e.X, e.Y))      If (hti.Type = DataGrid.HitTestType.Cell) Then        If (oldSelectedRow > -(1)) Then          ...

posted @ giovedì 30 settembre 2004 20:15 | Feedback (1) | Filed Under [ Code & Snippet .NET Framework ]

Generazione di un file ico da un file bmp

Ecco una funzioncina nata da una domanda sul Newsgroup di Vb.Net per generare un file ico da uno bmp. Public Sub BmpToIcon(ByVal fileName As String)    Dim bitmap As System.Drawing.Bitmap = _        New System.Drawing.Bitmap(fileName)    Dim hIcon As IntPtr = bitmap.GetHicon()     Dim icon As System.Drawing.Icon = _        System.Drawing.Icon.FromHandle(hIcon)     Dim stream As IO.Stream = IO.File.OpenWrite( _        System.IO.Path.GetDirectoryName(fileName) & _        System.IO.Path.GetFileNameWithoutExtension(fileName) & ".ico")         icon.Save(stream)         stream.Close()         icon.Dispose()        bitmap.Dispose()End Sub

posted @ giovedì 29 luglio 2004 09:50 | Feedback (2) | Filed Under [ Code & Snippet .NET Framework ]

Snippet: Ricavare il valore di una variabile in base al nome

Una delle domande che ogni tanto ricorrono nel NG di VB.NET è come ricavare il valore di una variabile conoscendo il nome. Supponendo di essere all'interno di una form ecco una soluzione al problema basata sulla Reflection: Public Variabile As String = "Valore" MsgBox(GetValueByName("Variabile"))Public Function GetValueByName(ByVal name as String) As String          Dim field As System.Reflection.FieldInfo          field = Me.GetType.GetField(name)          Return field.GetValue(Me).ToString()End Function Il metodo è estendibile comunque anche ad altri scenari.

posted @ venerdì 16 aprile 2004 20:28 | Feedback (1) | Filed Under [ Code & Snippet .NET Framework ]

Gestire i file udl

Ecco un paio di funzioni che ho scritto per creare e aprire un file udl tramite la DataLink Dialog utilizzando il namespace System.Diagnostics evitando così il reference ad AdoDb: Public Shared Function CreateUDLFile(ByVal udlFilePath As String) As Boolean            Dim file As New System.IO.FileInfo(udlFilePath)            'Creazione file            file.Create().Close()            'Apertura file            OpenUDLFile(udlFilePath)            'In caso di annullamento il file non viene generato e lo si elimina            If file.Length = 0 Then                file.Delete()                Return False            End If            Return TrueEnd Function Public Shared Sub OpenUDLFile(ByVal udlFilePath As String)            Dim process As System.Diagnostics.Process            process = System.Diagnostics.Process.Start(udlFilePath)            process.WaitForExit()                        process.Close()            process.Dispose()            process = NothingEnd Sub

posted @ mercoledì 14 aprile 2004 14:49 | Feedback (3) | Filed Under [ Code & Snippet Database .NET Framework ]

Riconoscere una stringa OleDb per SQLServer

Un modo per capire se una stringa OleDb si riferisce a SQLServer è quello di controllarne il provider tramite una regular expression: Public Overloads Shared Function IsSqlConnectionString(ByVal connectionString As String) As Boolean            Dim regex As New System.Text.RegularExpressions.Regex("Provider\s*=\s*SQLOLEDB[^;]*;", System.Text.RegularExpressions.RegexOptions.IgnoreCase)            Return regex.IsMatch(connectionString)End Function L'idea è ovviamente esensibile ad altri provider.

posted @ domenica 28 marzo 2004 15:11 | Feedback (1) | Filed Under [ Code & Snippet Database .NET Framework ]

Modificare un comando generato da un Commad Builder

Il CommandBuilder è un oggetto che se fosse più flessibile avrebbe sicuramente attratto maggiormente gli sviluppatori, una sua pessima abitudine è quella di invalidare le modifiche fatte ai comandi da lui generati.Per maggior info si veda il seguente:PRB: CommandBuilder Changes Modified Commands Back to Original Un modo per aggirare il problema può essere quello di clonare il comando generato ed aggiungere la modifica necessaria. Esempio: da.InsertCommand = DirectCast(DirectCast(da.InsertCommand, System.ICloneable).Clone, _                                                                               System.Data.IDbCommand)da.InsertCommand.CommandText &= "; SELECT SCOPE_IDENTITY() AS ID"da.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord

posted @ martedì 23 marzo 2004 20:02 | Feedback (3) | Filed Under [ Code & Snippet Database .NET Framework ]

Ricavare una stringa di connessione per SQLServer da una per OleDb

A volte torna utile utilizzare la Data Link per generare le stringhe di connessione:http://www.ugidotnet.org/tips/tips_read.aspx?ID=116La Data Link però ci restituisce una stringa di connessione per OleDb alla quale deve essere rimosso il parametro Provider per essere utilizzata per inizializzare un oggetto SqlConnection. Un modo può essere quello di utilizzare una regular expression: Public Shared Function GetSqlConnectionString(ByVal oledbConnectionString As String) As String Dim regex As New System.Text.RegularExpressions.Regex("Provider=[^;]*;", System.Text.RegularExpressions.RegexOptions.IgnoreCase) Return regex.Replace(oledbConnectionString, String.Empty) End Function  

posted @ sabato 20 marzo 2004 14:44 | Feedback (1) | Filed Under [ Code & Snippet Database .NET Framework ]

Associare un'icona da visualizzare nella Toolbox ad un controllo personalizzato

Un modo per associare ad un controllo personalizzato un'icona da visualizzare nella Toolbox è il seguente:1) Creare una bitmap di dimensione 16x16    (il colore del pixel nell'angolo in basso a sinistra rappresenta il colore trasparente) 2) Impostare il nome della bitmap a NomeControllo.bmp    o NomeNamespace.NomeControllo.bmp    se  il controllo risiede all'interno di un Namespace. 3) Impostandone la proprietà Build Action della bitmap a Embedded Resource 4) Impostare il seguente attributo sul controllo:    <System.Draving.TollboxBitmap(GetType(NomeControllo))>_    Public Class NomeControllo

posted @ mercoledì 17 marzo 2004 20:28 | Feedback (2) | Filed Under [ Code & Snippet Tips .NET Framework ]

BindingContext Trick

Quando in una form si deve gestire una tabella avente 2 o più campi i cui valori sono in relazione con i dati contenuti in un'altra tabella (xes si pensi al caso delle provincie per una semplice anagrafica che ha 2 indirizzi: abitazione e ufficio) viene spontaneo utilizzare due ComboBox bindati sulla DataTable collegata. Così facendo però i valori dei ComboBox risultano sincronizzati in quanto il BindingContext è unico per entrambi e non c'è modo di assegare valori diversi ai due controlli. La soluzione è quella di creare per il secondo ComboBox un nuovo BindingContext:combobox2.BindingContext = New System.Windows.Forms.BindingContext

posted @ mercoledì 10 marzo 2004 14:03 | Feedback (6) | Filed Under [ Code & Snippet Tips .NET Framework ]

Come verificare se un testo può essere visualizzato in un area prefissata

Questa funzione permette di verificare se un testo è visualizzabile integralmente in un area prefissata e può essere utile nei casi in cui si voglia visualizzare un ToolTip per testi che superano lo spazio messo a disposizione da un controllo (xes. un tooltip sugli item di un ListView in modalità dettaglio il cui testo supera la larghezza della colonna) Public Function IsTextExceedSize(ByVal graphics As System.Drawing.Graphics, _                                                     ByVal text As String, _                                                     ByVal font As System.Drawing.Font,                                                      ByVal width As Integer, _                                                     ByVal height As Integer) As Boolean    Dim textSize As System.Drawing.SizeF   Dim charactersFitted, linesFitted As Integer   Dim layoutRect As New System.Drawing.SizeF(width, height)    textSize = graphics.MeasureString(text, font, layoutRect,...

posted @ lunedì 23 febbraio 2004 19:33 | Feedback (8) | Filed Under [ Code & Snippet .NET Framework ]

Ricavare i valori selezionati da un ListBox bindato

Si supponga di avere un ListBox a multiselezione su cui si è impostato DataSource, ValueMember e DisplayMember.Per ricavare i ValueMember selezionati basta notare che in questo caso gli Items sono dei DataRowView. For index As Integer = 0 To Me.ListBox1.SelectedIndices.Count - 1      With DirectCast(Me.ListBox1.Items(Me.ListBox1.SelectedIndices(index)), _                                System.Data.DataRowView)               MsgBox(.Row(Me.ListBox1.ValueMember).ToString)       End WithNext

posted @ giovedì 19 febbraio 2004 00:13 | Feedback (53) | Filed Under [ Code & Snippet .NET Framework ]

Snippet: Cattura dell'output di un comando DOS

Dim myProcess As New ProcessDim myProcessStartInfo As New ProcessStartInfo("cmd.exe")myProcessStartInfo.Arguments = "/C dir c:"myProcessStartInfo.UseShellExecute = FalsemyProcessStartInfo.RedirectStandardOutput = TruemyProcess.StartInfo = myProcessStartInfomyProcess.Start()Console.WriteLine(myProcess.StandardOutput.ReadToEnd)myProcess.Close()

posted @ sabato 14 febbraio 2004 17:38 | Feedback (262) | Filed Under [ Code & Snippet .NET Framework ]

PropertyGrid: gestione delle date nulle

Ha volte capita di voler gestire tramite il controllo PropertyGrid delle date i cui valori sono memorizzati in un database, diventa quindi necessario gestire il caso della data nulla. Si supponga  di avere la seguente tabella:Config    ID (PK String)    Data (Date) per cui si è proveduto a generare una DataTest tipizzato ConfigSchema contenente la DataTable tipizzata Config.Per poter gestire i dati tramite un PropertyGrid è necessario costruirsi una Classe wrapper avente due proprietà ID e Data: Public Class ConfigWrapper    Private _Row As ConfigSchema.ConfigRow     Public Sub New(ByVal row As ConfigSchema.ConfigRow)        Me._Row = row    End Sub     Public Property ID() As String        Get            Return Me._Row.ID        End...

posted @ domenica 1 febbraio 2004 21:42 | Feedback (4) | Filed Under [ Code & Snippet .NET Framework ]

Simulare l'evento Validating

A volte può capitare (almeno a me) di utilizzare l'evento Validanting per delle decodifiche (xes IDCliente - RagioneSociale) appare chiaro che in situazioni come questa sarebbe utile avere una funzione PerformValidating, che invochi l'elaborazione contenuta nell'evento e ci dica se la validazione è riuscita o meno, da utilizzare quando modifichiamo il record per evitare la ripetizione del codice di decodifica o tortusi escamotage per richiamare la funzione a cui è collegato l'evento Validating. Un modo per ottenere tale risultato può essere quello di ricorrere alla Reflection: Function PerformValidating(ByVal control As System.Windows.Forms.Control) As Boolean       control.Focus()       Dim method As System.Reflection.MethodInfo       method = control.GetType.GetMethod("OnValidating", _                       ...

posted @ lunedì 26 gennaio 2004 12:41 | Feedback (5) | Filed Under [ Code & Snippet Tips .NET Framework ]

Gestire le descrizioni sugli enumerativi

Molto spesso per comodità si utilizzano nei programmi gli enumerativi e altrettanto spesso si desidererebbe associare agli elementi una descrizione da utilizzare poi sull'interfaccia utente. Un metodo può essere quello di utilizzare l'attibuto System.ComponentModel.Description come segue: Public Enum Prove As Integer         _         Uno         _         Due         _         TreEnd Enum Per recuperare poi queste descrizioni si può utilizzare la reflection come segue: Dim fields() As System.Reflection.FieldInfofields = GetType(Prove).GetFields(Reflection.BindingFlags.Public Or _                                                      Reflection.BindingFlags.Static) For Each field As System.Reflection.FieldInfo In fields       Dim descriptions() As Object       descriptions = field.GetCustomAttributes( _                             GetType(System.ComponentModel.DescriptionAttribute), _                              False)        If descriptions.Length > 0 Then              MsgBox(DirectCast(descriptions(0), _                            System.ComponentModel.DescriptionAttribute).Description)       End If Next

posted @ lunedì 19 gennaio 2004 20:27 | Feedback (10) | Filed Under [ Code & Snippet ]

Powered by:
Powered By Subtext Powered By ASP.NET