<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.NET Framework</title>
        <link>http://blogs.ugidotnet.org/alexblog/category/.NET Framework.aspx</link>
        <description>.NET Framework</description>
        <language>it-IT</language>
        <copyright>Ermanno Goletto</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>Ricavare i path di default per i file di dati e logs in SQL Server 2005</title>
            <link>http://blogs.ugidotnet.org/alexblog/archive/2008/05/29/92866.aspx</link>
            <description>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 script T-SQL per ricavare il path di default per i file di dati:
USE master
declare @DefaultData nvarchar(512)
--Lettura chiave di registry HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultData
EXEC xp_instance_regread N'HKEY_LOCAL_MACHINE',
 N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData',
 @DefaultData OUTPUT, 'no_output'
--Se la chiave di registry non esiste si utilizza il path del file mdf del database master
IF (@DefaultData IS NULL)
 BEGIN
  SELECT  @DefaultData = SUBSTRING(physical_name, 0, CHARINDEX(N'master.mdf', physical_name))
  FROM sys.database_files
  WHERE name='master'
 END
--Rimozione eventuale slash finale
IF ((@DefaultData IS NOT NULL) AND (CHARINDEX(N'\', @DefaultData, len(@DefaultData)) &amp;gt; 0))
BEGIN
 SELECT @DefaultData = STUFF (@DefaultData,len(@DefaultData),1,N'')
END
SELECT @DefaultData
Mentre questo è lo script per ricavare il path di default per i file di log:
USE master
declare @DefaultLog nvarchar(512)
--Lettura chiave di registry HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\DefaultLog
EXEC xp_instance_regread N'HKEY_LOCAL_MACHINE',
 N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog',
 @DefaultLog OUTPUT, 'no_output'
--Se la chiave di registry non esiste si utilizza il path
--del file mdf del database master
IF (@DefaultLog IS NULL)
 BEGIN
  SELECT  @DefaultLog = SUBSTRING(physical_name, 0, CHARINDEX(N'mastlog.ldf', physical_name))
  FROM sys.database_files
  WHERE name='mastlog'
 END
--Rimozione eventuale slash finale
IF ((@DefaultLog IS NOT NULL) AND (CHARINDEX(N'\', @DefaultLog, len(@DefaultLog)) &amp;gt; 0))
BEGIN
 SELECT @DefaultLog = STUFF (@DefaultLog,len(@DefaultLog),1,N'')
END
SELECT @DefaultLog
Se poi occorre usare questi script in un programma .NET il mio consiglio è quello di non inserire lo script nel codice, ma di creare dei file con estensione sql in questo modo Visual Studio visualizzerà lo script evidenziando le parole chiave esattamente come in Management Studio. Quindi aggiungere il file come risorsa in questo modo VS 2005 e sucessivi creeranno una comoda prorietà stringa in My.Resources che conterrà il testo del file. In VS 2003 è possibile impostare il file come Embedded e tramite un po' di codice leggere il contenuto del file:
        Dim text As String = String.Empty
        Dim resource As System.IO.Stream = _
            System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream( _
                "NameSpace.FileName")
        Dim reader As New System.IO.StreamReader(resource)
        text = reader.ReadToEnd()
        reader.Close() : reader = Nothing
        resource.Close() : resource = Nothing&lt;img src="http://blogs.ugidotnet.org/alexblog/aggbug/92866.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/alexblog/archive/2008/05/29/92866.aspx</guid>
            <pubDate>Thu, 29 May 2008 22:50:39 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/alexblog/archive/2008/05/29/92866.aspx#feedback</comments>
            <slash:comments>29</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/alexblog/comments/commentRss/92866.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/alexblog/services/trackbacks/92866.aspx</trackback:ping>
        </item>
        <item>
            <title>Autosizing delle righe di un DataGrid</title>
            <link>http://blogs.ugidotnet.org/alexblog/archive/2008/05/16/92703.aspx</link>
            <description>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
  Dim dataGridtype As System.Type = dataGrid.GetType
  Do
    dataGridtype = dataGridtype.BaseType
    If dataGridtype Is Nothing Then Exit Sub
  Loop Until dataGridtype.FullName = GetType(System.Windows.Forms.DataGrid).FullName
  
  While dataGridtype.FullName &amp;lt;&amp;gt; GetType(System.Windows.Forms.DataGrid).FullName
    dataGridtype = dataGridtype.BaseType
  End While
  Dim mi As System.Reflection.MethodInfo = dataGridtype.GetMethod("get_DataGridRows", _
    Reflection.BindingFlags.FlattenHierarchy Or _
    Reflection.BindingFlags.IgnoreCase Or _
    Reflection.BindingFlags.Instance Or _
    Reflection.BindingFlags.NonPublic Or _
    Reflection.BindingFlags.Public Or _
    Reflection.BindingFlags.Static)
  Dim dataGridRows As New ArrayList
  For Each item As Object In CType(mi.Invoke(dataGrid, Nothing), Array)
    If item.ToString().EndsWith("DataGridRelationshipRow") Then
      dataGridRows.Add(item)
    End If
  Next
  Dim bmb As System.Windows.Forms.BindingManagerBase = _
    dataGrid.BindingContext(dataGrid.DataSource, dataGrid.DataMember)
  If Not bmb Is Nothing AndAlso bmb.Count &amp;gt; 0 Then
    Dim size As System.Drawing.SizeF
    Dim g As System.Drawing.Graphics = _
      System.Drawing.Graphics.FromHwnd(dataGrid.Handle)
    Dim sf As New StringFormat(StringFormat.GenericTypographic)
    Dim columnIndex As Integer = columnStyle.DataGridTableStyle.GridColumnStyles.IndexOf(columnStyle)
    Dim pi As System.Reflection.PropertyInfo
    Dim rowHeight As Integer
    For rowIndex As Integer = 0 To bmb.Count - 1
      size = g.MeasureString(dataGrid(rowIndex, columnIndex).ToString(), dataGrid.Font, columnStyle.Width, sf)
      pi = dataGridRows(rowIndex).GetType().GetProperty("Height")
      rowHeight = System.Convert.ToInt32(size.Height)
      'Little extra cellpadding space 
      rowHeight += 8
      pi.SetValue(dataGridRows(rowIndex), rowHeight, Nothing)
    Next
    'Rilascio risorse
     g.Dispose() : g = Nothing
     sf.Dispose() : sf = Nothing
  End If
End Sub&lt;img src="http://blogs.ugidotnet.org/alexblog/aggbug/92703.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/alexblog/archive/2008/05/16/92703.aspx</guid>
            <pubDate>Fri, 16 May 2008 16:59:17 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/alexblog/archive/2008/05/16/92703.aspx#feedback</comments>
            <slash:comments>19</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/alexblog/comments/commentRss/92703.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/alexblog/services/trackbacks/92703.aspx</trackback:ping>
        </item>
        <item>
            <title>Inviare mail tramite .NET 1.1 con Exchange 2003 e Exchange 2007</title>
            <link>http://blogs.ugidotnet.org/alexblog/archive/2008/04/09/92134.aspx</link>
            <description>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.&lt;img src="http://blogs.ugidotnet.org/alexblog/aggbug/92134.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/alexblog/archive/2008/04/09/92134.aspx</guid>
            <pubDate>Wed, 09 Apr 2008 13:15:04 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/alexblog/archive/2008/04/09/92134.aspx#feedback</comments>
            <slash:comments>14</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/alexblog/comments/commentRss/92134.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/alexblog/services/trackbacks/92134.aspx</trackback:ping>
        </item>
        <item>
            <title>Sincronizzazione Replica SQL Server 2005 per sottoscrizioni Pull</title>
            <link>http://blogs.ugidotnet.org/alexblog/archive/2008/03/27/91913.aspx</link>
            <description>Dopo aver configurato la replica il passo successivo è quello di automatizzare la sincronizzazione delle sottoscrizioni e per farlo vi sono vari modi come ad esempio utilizzare Windows Synchronization Manager (mobsync.exe) che permette l'impostazione della sincronizzazione all'accesso, alla chiusura, durante l'inattività o in modo pianificato.
Se però come, nel mio caso, per eseguire la sincronizzazione è necessario avviare prima una connesione VPN e chiuderla al termine la cosa si complica perchè mobsync consente di gestire la connesione automatica sono per sincronizzazioni pianificate.
Per ovviare è possibile ricorrere ad uno script di questo tipo:
SET ConnectionName="Nome Connessione RAS"
SET Publisher=NomeServerPubblicazione
SET Subscriber=NomeServerSottoscrizione
SET PublicationDB=NomeDBPubblicazione
SET SubscriptionDB=NomeDBSottoscrizione
SET Publication=NomePubblicazione
Rem Avvio connessione VPN
start /w %Systemroot%\System32\Rasphone -d %ConnectionName"

Rem Avvio Sincronizzazione Replica
"%ProgramFiles%\Microsoft SQL Server\90\COM\REPLMERG.EXE" -Publication %Publication% -Publisher %Publisher% -Subscriber %Subscriber% -Distributor %Publisher% -PublisherDB %PublicationDB% -SubscriberDB %SubscriptionDB% -PublisherSecurityMode 1 -OutputVerboseLevel 2 -SubscriberSecurityMode 1 -SubscriptionType 1 -DistributorSecurityMode 1 -Validate 3 -ParallelUploadDownload 1
REM Arresto connessione VPN
start /w %Systemroot%\System32\Rasphone -h %ConnectionName"
Lo script utilizza REPLMERG.EXE che consente per default registra maggiori informazioni sul processo di sincronizzazione rispetto all'esecuzione con mobsync, informazioni visibili tramite il Monitoraggio Replica. Il livello di informazioni è impostabile tramite il parametro HistoryVerboseLevel (per default =2)
Per ulteriori informazioni si veda:

    Replication Merge Agent
    How to: Monitor Replication Agents from Management Studio (SQL Server Management Studio) 
    How to: Start Replication Monitor (Replication Monitor)

Se è necessario è possibile integrare il proceso di sincronizzazione all'interno di un'applicazione tramite i Replication Management Objects (RMO).
&lt;img src="http://blogs.ugidotnet.org/alexblog/aggbug/91913.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/alexblog/archive/2008/03/27/91913.aspx</guid>
            <pubDate>Thu, 27 Mar 2008 22:31:43 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/alexblog/archive/2008/03/27/91913.aspx#feedback</comments>
            <slash:comments>8</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/alexblog/comments/commentRss/91913.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/alexblog/services/trackbacks/91913.aspx</trackback:ping>
        </item>
        <item>
            <title>L'ordine di installazione</title>
            <link>http://blogs.ugidotnet.org/alexblog/archive/2008/03/07/91556.aspx</link>
            <description>Mi era già capitato di vedere altre volte sul alcuni computer che all'apertura della Management Studio 2005 venisse visualizzata una dialog vuota, ebbene oggi mi è capitato su un computer XP SP2 appena installato su cui era stato installato il .NET Framework 2.0, l'installer 3.1, SQL Server 2005 Express with Advanced Services e al termine l'aggiornamento con Microsoft Update per installare hotfix (una novantina) e IE 7. Sul pc così configurato su cui la Management Studio 2005 non dava nessun problema è stato installato il .NET Framework 1.1 e da lì è comparsa la misteriosa dialog che non scompariva neppure disinstallato il .NET Framework 1.1.
In questi casi applico una regola appresa nell'esperienza sistemistica installare i package e SP nell'ordine in cui sono stati rilasciati (sulle hotfix di solito si può essere meno rigorosi dal punto di vista cronologico).
Infatti siccome il problema è abbastanza macroscopico da non passare inosservato significa che le cisrcostanze di installazione più comuni non portano al verificarsi del problema. Io steso devo dire di averlo visto un paio di volt, ma si solito nelle mie installazioni il .NET Framework 1.1 è sempre stato installato prima del 2.0.
Quindi ho scelto un punto di ripristino in cui la macchina era ancora pulita (il ripristino non elimina i file dei DB di SQL Server occorre farlo a mano, ma elimina le directory create successivamente) quindi ho seguito questìordine di installazione:

    Microsoft .NET Framework Version 1.1 Redistributable Package (03/04/2003)
    http://www.microsoft.com/downloads/details.aspx?FamilyID=262D25E3-F589-4842-8157-034D1E7CF3A3&amp;amp;displaylang=it
    Microsoft .NET Framework 1.1 Service Pack 1 (30/08/2004)
    http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38
    Microsoft .NET Framework versione 2.0 Redistributable Package (22/01/2006)
    http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5
    Windows Installer 3.1 Redistributable v2 (02/09/2005)
    http://www.microsoft.com/downloads/details.aspx?FamilyID=889482FC-5F56-4A38-B838-DE776FD4138C&amp;amp;displaylang=it
    Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 2 (17/02/2007)
    http://www.microsoft.com/downloads/details.aspx?familyid=5B5528B9-13E1-4DB9-A3FC-82116D598C3D&amp;amp;displaylang=it
    Microsoft .NET Framework 2.0 Service Pack 1 (19/11/2007)
    http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=79bc3b77-e02c-4ad3-aacf-a7633f706ba5
    Esecuzione di Microsoft Update che oltre alle varie fix installa:
    
        Windows Internet Explorer 7 per Windows XP SP2 (25/10/2007)
        http://www.microsoft.com/downloads/details.aspx?FamilyID=9ae91ebe-3385-447c-8a30-081805b2f90b&amp;amp;DisplayLang=it
        Aggiornamento della protezione per Windows XP (KB938127) per IE7 (13/08/2007)
        http://www.microsoft.com/downloads/details.aspx?FamilyID=9f5da816-194c-478e-8a96-9421a0c52c9f&amp;amp;DisplayLang=it
        KB928366 per Microsoft .NET Framework 1.1 Service Pack 1 (10/07/2007)
        http://www.microsoft.com/downloads/details.aspx?FamilyID=281fb2cd-c715-4f05-a01f-0455d2d9ebfb&amp;amp;DisplayLang=it
    
    


Con quest'ordine di installazione che rispetta l'ordine di rilascio dei framework e relativi sp non ho più avuto problemi, chiarmente se si utilizza per il deploy strumenti SMS le corrette precedenze di installazione sono già rispettate e questo tipo di problemi non dovrebbero verificarsi.
&lt;img src="http://blogs.ugidotnet.org/alexblog/aggbug/91556.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/alexblog/archive/2008/03/07/91556.aspx</guid>
            <pubDate>Fri, 07 Mar 2008 00:18:52 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/alexblog/archive/2008/03/07/91556.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/alexblog/comments/commentRss/91556.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/alexblog/services/trackbacks/91556.aspx</trackback:ping>
        </item>
        <item>
            <title>Controllare le statistiche di rete</title>
            <link>http://blogs.ugidotnet.org/alexblog/archive/2008/01/15/90693.aspx</link>
            <description>Siccome ho dovuto mettere mano ad una rete non realizzata da me in cui di verificavano rallentamenti e problemi vari mi sono scritto un'utility basata su .NET 1.1 che eseguisse i vari comandi per controllare le impostazioni e le statistiche dire e ne catturasse l'output oltre a recuperare le statistiche IP, TCP e UDP via API. Per comodità le informazioni sono inserite in un RichTextBox ed è possibile eseguire una semplice stampa.
La versione 1.0.0.0 di tle utility la trovare al seguente link (utilizzate tasto dx salva oggetto con nome):
http://xoomer.alice.it/ermannogoletto/MyLab/CheckNet2003v1.0.0.0.zip&lt;img src="http://blogs.ugidotnet.org/alexblog/aggbug/90693.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/alexblog/archive/2008/01/15/90693.aspx</guid>
            <pubDate>Tue, 15 Jan 2008 13:22:18 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/alexblog/archive/2008/01/15/90693.aspx#feedback</comments>
            <slash:comments>8</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/alexblog/comments/commentRss/90693.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/alexblog/services/trackbacks/90693.aspx</trackback:ping>
        </item>
        <item>
            <title>Stampare un'immagine con .NET</title>
            <link>http://blogs.ugidotnet.org/alexblog/archive/2007/11/08/89553.aspx</link>
            <description>Nel caso sia necessario stampare un'immagine rispettando le dimensioni della stessa e posizionandola in modo preciso sulla pagina il .NET Framework offre nativamente tutto ciò che ci serve. Occorre però fare alcune considerazioni sulle unità di misura che mi annoto a mia futura memoria e per eventaule utilità di altri:

     Per comodità si esprimeranno le misure dei margini che utilizzerò per posizionare l'immagine e le dimensioni della stessa in millimetri.
    L'unità di misura dei margini nell'oggetto DefaultPageSettings sono espresse in centesimi di pollice.
    Oltre ai magini si deve tenere conto anche degli HardMarginX e HardMarginY espressi anch'essi in centesimi di pollice e che rappresentano i magini fisici della stampante. Gli HardMarginX e HardMarginY sono in margini al di sotto di cui non è possibile scendere e se utilizziamo i margini per posizionare l'immagine occorre ricordare che il margine reale e il margine impostao tramite DefaultPageSettings.Margins più HardMarginX per Left e HardMarginY per Top.
    Le dimensioni delle immagini sono date in pixels e dpi (Dots per inch) quindi le dimensioni in pollici saranno Inches = Pixels/DPI che andranno ancora convertite in centesimi di pollice moltilicando per 100.

Di seguito un banale esempio:
Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click
   'Impostazione margini left, right, top, bottom
   Util.SetMarginInMillimeters(Me.Document.DefaultPageSettings, 15, 15, 20, 20)
   Me.PrintPreviewDialog.ShowDialog(Me)
End Sub

Private Sub Document_PrintPage(ByVal sender As Object, _
          ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles Document.PrintPage
   'Impostazione stampa di una sola pagina
   e.HasMorePages = False
   e.Graphics.DrawImage(My.Resources.Test, _
      e.MarginBounds.Left, e.MarginBounds.Top, _
      Util.PixelsToHundredthsOfInch(My.Resources.Test.Width, My.Resources.Test.HorizontalResolution), _
      Util.PixelsToHundredthsOfInch(My.Resources.Test.Height, My.Resources.Test.VerticalResolution))
End Sub
Per l'esempio completo si veda il seguente link: http://xoomer.alice.it/ermannogoletto/MyLab/TestPrintImageFile.zip
(per scaricarlo in caso di problemi tasto destro -&amp;gt; Salva con nome).
&lt;img src="http://blogs.ugidotnet.org/alexblog/aggbug/89553.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/alexblog/archive/2007/11/08/89553.aspx</guid>
            <pubDate>Thu, 08 Nov 2007 20:02:08 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/alexblog/archive/2007/11/08/89553.aspx#feedback</comments>
            <slash:comments>9</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/alexblog/comments/commentRss/89553.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/alexblog/services/trackbacks/89553.aspx</trackback:ping>
        </item>
        <item>
            <title>String.Format e i valori Boolean</title>
            <link>http://blogs.ugidotnet.org/alexblog/archive/2007/08/20/87872.aspx</link>
            <description>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))&lt;img src="http://blogs.ugidotnet.org/alexblog/aggbug/87872.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/alexblog/archive/2007/08/20/87872.aspx</guid>
            <pubDate>Mon, 20 Aug 2007 02:44:03 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/alexblog/archive/2007/08/20/87872.aspx#feedback</comments>
            <slash:comments>12</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/alexblog/comments/commentRss/87872.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/alexblog/services/trackbacks/87872.aspx</trackback:ping>
        </item>
        <item>
            <title>Preview di uno Screensaver in  un oggetto container</title>
            <link>http://blogs.ugidotnet.org/alexblog/archive/2007/08/08/87583.aspx</link>
            <description>Per fare il preview di uno Screensaver in un oggetto container &amp;#232; 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 " &amp;amp; Me.PictureBox1.Handle.ToString()startInfo.FileName = ScreenSaverNamestartInfo.UseShellExecute = FalsescreenSaverProcess = System.Diagnostics.Process.Start(startInfo)
Per arrestare la visualizzazione dello Screensaver baster&amp;#224; terminare il processo:screenSaverProcess.Kill()screenSaverProcess.Close()screenSaverProcess.Dispose()&lt;img src="http://blogs.ugidotnet.org/alexblog/aggbug/87583.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/alexblog/archive/2007/08/08/87583.aspx</guid>
            <pubDate>Wed, 08 Aug 2007 22:18:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/alexblog/archive/2007/08/08/87583.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/alexblog/comments/commentRss/87583.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/alexblog/services/trackbacks/87583.aspx</trackback:ping>
        </item>
        <item>
            <title>www.easydotnet.it ovvero il sito per chi vuole inziare a lavorare con .NET</title>
            <link>http://blogs.ugidotnet.org/alexblog/archive/2007/05/29/79540.aspx</link>
            <description>Voglio segnalare, anche se con estremo ritardo, questo spendido sito nato dalla collaborazione di un cuneese (Ugo Silato) e di un napoletano (Marco Siniscalco) che si propone di supportare chi vuole iniziare a lavorare con .NET.
Quindi per quanti hanno in mente qualche articolo base sulla tecnologia .NET, ma non sapendo dove pubblicarlo hanno messo nel casetto l'iniziativa adesso non ci sono pi&amp;#249; scuse per nessuno (me compreso).&lt;img src="http://blogs.ugidotnet.org/alexblog/aggbug/79540.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ermanno Goletto</dc:creator>
            <guid>http://blogs.ugidotnet.org/alexblog/archive/2007/05/29/79540.aspx</guid>
            <pubDate>Tue, 29 May 2007 00:09:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/alexblog/archive/2007/05/29/79540.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/alexblog/comments/commentRss/79540.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/alexblog/services/trackbacks/79540.aspx</trackback:ping>
        </item>
    </channel>
</rss>