martedì 29 settembre 2009

Cambiare la lingua di Visual Studio 2008

Oggi ho avuto qualche problema installando Windows Mobile 6 Professional SDK Refresh e Windows Mobile 6 Standard SDK Refresh.

Scaricati i file di installazione e installati, ho provato a creare un progetto di tipo Windows Mobile 6.0 e mi sono beccato questo errore:

captured_Image.png

Dopo qualche smanettamento abbiamo scoperto (e ringrazio il mitico Matteo per l’aiuto) che il mio Visual Studio 2008, pur essendo in Inglese (prova ne era il fatto che gli hotfix e la SP installata erano nella lingua di Albione) aveva come lingua impostata quella del sistema operativo (italiano).

Ovviamente, non avrebbe mai potuto trovare la cartella 1040 (italiano) visto che l’installazione dell’SDK aveva supposto che la lingua del Visual Studio fosse Inglese (1033).

La soluzione del problema è duplice:

1) Duplicate la cartella 1033 presente nel percorso evidenziato dall’errore e la rinominate 1040

2) cambiate la lingua di Visual Studio.

Per questa ultima eventualità basta andare nel menù Strumenti/Opzioni:

captured_Image.png[5]

e cambiare il linguaggio scegliendo dalla tendina:

captured_Image.png[7]

Una volta eseguita l’operazione è necessario riavviare Visual Studio e il problema dovrebbe essere risolto.

 

giovedì 24 settembre 2009

Disponibili i link per gli eventi di lancio di Windows 7 e Windows Server 2008 R2

Sono finalmente disponibili i link per iscriversi gli eventi di lancio di Windows 7 e Windows Server 2008 R2.

L’evento di Roma si terrà allo Sheraton Golf Hotel mentre quello di Milano allo SMAU.

Il link per iscriversi alle sessioni da sviluppatori è il seguente :

http://www.microsoft.com/italy/lancio09/sviluppatori.aspx

Quello per i professionisti IT è:

http://www.microsoft.com/italy/lancio09/professionisti_it.aspx

Il sito di riferimento dell’evento è:

http://www.microsoft.com/italy/lancio09/index.aspx

 

Rilasciato Web Platform Installer 2.0 RTW

Solo per citare un post del Blog MSDN Italia in cui si annuncia il rilascio della WPI 2.0:

Il blog del team MSDN Italia : Web Platform Installer 2.0 RTW

 

domenica 20 settembre 2009

Mi tremano le gambe!!!

Sono proprio contento di essere stato scelto dalla community DotNetRomaCestà come speaker per il prossimo evento comunitario che si terrà a Roma:

Gladiatori Fest

Sarò tra due mostri sacri del mondo .NET cioè Simone Charetta e Luca Bianchi e la cosa fa aumentare ancora di più l’adrenalina!!!

Per me si realizza un sogno che coltivo da quando ho cominciato a lavorare (almeno 12 anni fa) e, ora eccoci qua.

Spero solo di essere all’altezza, ma sono convinto che ce la metterò tutta e sarà una sfida interessante ed emozionante!!!

Ragazzi, se volete farvi 4 risate, venite all’evento e n on ve ne pentirete!!!!!

 

Primo evento DotNetRomaCestà: da non perdere!!!!

Vi segnalo il primo evento organizzato dalla community romana DotNetRomaCestà incentrato su Visual Studio 2010, ASP.NET 4.0 e MVC.

Il link seguente è per iscrivervi. L’evento è gratuito e, secondo me, ci sarà da divertirsi:

http://www.dotnetromacesta.org/EventoGladiatori.aspx

 

sabato 19 settembre 2009

ASP.NET : Tag Mapping

Forse non tutti sanno che in ASP.NET è possibile letteralmente “rimappare” i tag ASPX (ovvero i controlli che mettiamo nelle pagine) verso delle nostre classi che ridefiniscono il comportamento dei controlli originali.

Tanto per fare un esempio, supponiamo che non sia di nostro gradimento il modo con cui viene renderizzato il controllo <asp:Label> (ovvero con il tag <span> HTML).

Per fare in modo che il controllo Label si comporti in maniera differente rispetto al comportamento standard, potremmo creare un controllo, magari derivato dalla classe Label, che ridefinisca il modo con cui viene “scritto” sullo stream HTML diretto al client. In pratica ridefinendo il metodo Render().

A questo punto, però, dovremmo sostituire tutti i controlli del nostro sito con il nuovo controllo e, la cosa, non sempre è possibile.

In maniera più semplice e relativamente indolore possiamo adoperare la tecnica del Tag Mapping.

In sostanza, definiamo all’interno del web.config la sezione <tagMapping> (nella sezione <pages>) in cui specifichiamo quale classe deve essere utilizzata dal framework al posto della comune Label.

Per fare un esempio, supponiamo di aver realizzato la classe DivLabel che renderizza una Label come un <div> HTML.

Public Class DivLabel
    Inherits Label

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        With writer
            .WriteBeginTag("div")
            .Write(" id=""" + Me.UniqueID + """")
            .Write(">")
            .Write(Me.Text)
            .WriteEndTag("div")
        End With
    End Sub
End Class

Nella precedente classe ho, per semplicità, tralasciato il render relativo alle proprietà della Label e degli eventuali attributi della stessa (ad esempio quelli di stile).

Supponiamo di avere la seguente pagina ASPX:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Label.aspx.vb" Inherits="Label" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:Label ID="myLabel" runat="server" Text="Label"></asp:Label>
    </form>
</body>
</html>

Questa viene, normalmente, trasformata nella seguente pagina HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>
    </title>
</head>
<body>
    <form name="form1" method="post" action="Label.aspx" id="form1">
        <div>
            <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJOTczNTMyNjI5ZGTKpn/ljpIej9oH+QYRJuImecM++g==" />
        </div>
        <span id="myLabel">Label</span>
    </form>
</body>
</html>

Dove la label myLabel diventa uno <span>.

Per far si che il framework utilizzi la nostra classe DivLabel al posto della Label di sistema, basta inserire la seguente sezione nel file di configurazione web.config:

<pages>
    .
    .
    <tagMapping>
        <add tagType="System.Web.UI.WebControls.Label" mappedTagType="DivLabel" />
    </tagMapping>
    .
    .
</pages>

Aggiunta questa sezione, la precedente pagina viene renderizzata nel seguente modo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>
        </title>
    </head>
<body>
    <form name="form1" method="post" action="Label.aspx" id="form1">
        <div>
            <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTYwMzIyMDQ0NWRknusqxujji7odF/YNcMp+fJItZcE=" />
        </div>
        <div id="myLabel">Label</div>
    </form>
</body>
</html>

Il framework, dunque, richiama effettivamente la nostra classe DivLabel al posto della Label nel momento in cui deve interpretare il tag <asp:Label>.

In questo modo la label standard è sostituita con la nostra label e, questo, potenzialmente, senza cambiare le pagine già esistenti.

Questa tecnica è da utilizzare ogni qual volta l’implementazione del render di un controllo del framework non ci soddisfa.

 

mercoledì 16 settembre 2009

Annunciato Microsoft AJAX CDN

Riporto il post di Scott Guthrie (inchino)  con cui annuncia il lancio di

Microsoft AJAX Content Delivery Network.

Announcing the Microsoft AJAX CDN - ScottGu's Blog

Dategli un’occhiata perchè, secondo me, ha campi di utilizzo interessanti.

 

lunedì 7 settembre 2009

ASP.NET : Eseguire post-back da javascript

In questo post vi vorrei illustrare un modo per forzare il post-back di una pagina utilizzando il javascript e, ovviamente, riuscire ad intercettare l’evento e il controllo che lo ha generato lato server.

Innanzitutto creiamo un progetto di tipo ASP.NET Web Site:

captured_Image.png

Visual studio ci crea automaticamente un sito web con una pagina Default.aspx.

In questa pagina faremo in modo di creare 10 tag <div> (senza l’attributo runat=”server”) in fase di pre-render e attiveremo, al click dell’utente, un post back.

Per fare questo utilizziamo il seguente pezzo di codice:

Protected Sub Page_PreRender(ByVal sender As Object, _
                 ByVal e As System.EventArgs) Handles Me.PreRender
        For index = 0 To 10
            Dim div = New HtmlGenericControl("div")
            div.ID = String.Format("div_{0}", index)
            Dim PostBackStr = Me.ClientScript.GetPostBackEventReference(div, index.ToString())
            div.Attributes("onclick") = String.Format("javascript:{0};", PostBackStr)
            div.InnerText = String.Format("Div numero {0}", index)
            Me.Controls.Add(div)
        Next
End Sub

L’istruzione essenziale per il meccanismo di postback da javascript è quella che utilizza la chiamata al metodo GetPostBackEventReference().

Questo metodo, tra i suoi overloads, ne ha uno che accetta un controllo e un argomento e genera una stringa che, quando viene trattata come script nel client, avvia il postback.

Per intercettare il controllo che ha generato l’evento ed il relativo argomento dell’evento possiamo basarci sui parametri :

Me.Page.Request("__EVENTTARGET")

Me.Page.Request("__EVENTARGUMENT")

In particolare, ad esempio, possiamo gestire il post-back della pagina all’interno dell’evento di load della stessa nel seguente modo:

Protected Sub Page_Load(ByVal sender As Object, _
                 
ByVal e As System.EventArgs) Handles Me.Load
    If Me.Page.IsPostBack Then
        Dim eventTarget = Me.Page.Request("__EVENTTARGET")
        Dim eventArg = Me.Page.Request("__EVENTARGUMENT")
        Me.Page.Response.Write(String.Format("Controllo={0} ; Argomento={1}", eventTarget, eventArg))
    End If
End Sub

Possiamo, quindi, effettuare confronti sulla stringa eventTarget e trattare opportunamente l’argomento eventArg.

Analogo discorso si può ripetere se ci troviamo in un custom control o in una classe derivata da Control.

 

giovedì 3 settembre 2009

VB.NET: SplashScreen con effetto fade-in

In questo post vorrei proporvi un modo per realizzare una splash screen per le nostre applicazioni Windows Form che appare progressivamente con un effetto fade.

Supponiamo di avere il nostro progetto VB.NET in una soluzione Visual Studio 2008 in cui abbiamo il sorgente della nostra applicazione Windows Form.

Inseriamo una splash screen utilizzando il menù Progetto->Aggiungi Nuovo Elemento

captured_Image.png

e selezionando il tipo di elemento “Schermata Iniziale”

captured_Image.png[5]

A questo punto Visual Studio creerà, automaticamente, la schermata iniziale che possiamo personalizzare graficamente come vogliamo.

captured_Image.png[7]

Per poter fare in modo che questa finestra appaia nel momento in cui avviamo l’applicazione, è necessario aprire le proprietà del progetto e impostare la maschera di avvio:

captured_Image.png[9]

In questo modo, all’avvio dell’applicazione, la schermata appare immediatamente e scompare un attimo prima della visualizzazione della finestra dell’applicazione.

Possiamo far apparire la schermata iniziale con un effetto di tipo fade-in, inserendo un componente timer all’interno della form iniziale (che chiameremo tmrShow):

captured_Image.png[11]

e gestendo la progressiva visualizzazione (agendo sulla proprietà Opacity della form) all’interno dell’evento Tick del timer:

Private Sub tmrShow_Tick(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles tmrShow.Tick
    SetWindowOpacity(Me.Opacity + 0.05)
End Sub

Il metodo SetWindowOPacity ci permette di impostare l’opacità della form:

Protected Delegate Sub SetWindowOpacityDelegate(ByVal opacity As Double)
Protected Sub SetWindowOpacity(ByVal opacity As Double)
    If Me.InvokeRequired Then
        Me.Invoke(New SetWindowOpacityDelegate(AddressOf SetWindowOpacity), _
            opacity)
    Else
        If opacity >= 0 And opacity <= 1 Then
            Me.Opacity = opacity
        ElseIf opacity < 0 Then
            Me.Opacity = 0
        Else
            Me.Opacity = 1
        End If
    End If
End Sub

Osserviamo che siamo costretti ad utilizzare il metodo Invoke della classe Control per non ottenere errore nel momento in cui si effettua la valorizzazione della proprietà Opacity da un thread (quello del Timer) che non è il thread “proprietario” del controllo.

Questa è una tecnica da utilizzare sempre nel momento in cui si ha la necessità di aggiornare controlli Windows Form in maniera asincrona.

Il metodo Invoke, infatti, ci permette di eseguire del codice nel thread principale del controllo in modo da non ottenere una chiamata cross-thread. Il metodo di aggiornamento dovrebbe essere il più ottimizzato possibile e non richiedere troppo tempo per essere eseguito per non bloccare il thread principale dell’applicazione (e, quindi, l’applicazione stessa). Per sapere se è necessario l’utilizzo del metodo Invoke (cioè se non ci troviamo già nel thread principale), dobbiamo utilizzare la proprietà InvokeRequired.

Per completare l’opera ed ottenere una schermata iniziale che appare lentamente, è sufficiente impostare a 0 la proprietà Opacity della form iniziale:

captured_Image.png[13]

La velocità del fade si può manipolare giocando sulla proprietà Interval del Timer e sul valore numerico 0,05 presente nel gestore di evento del Tick del timer stesso.

 

martedì 1 settembre 2009

Articolo: Ten Common SQL Programming Mistakes

Segnalo un articolo assolutamente da leggere sui 10 errori più comuni in cui si incorre utilizzando T-SQL:

Ten Common SQL Programming Mistakes

Io l’ho trovato decisamente interessante.

 

Technorati Tag: ,