Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Copiare testo negli appunti, da Silverlight a LightSwitch (con VB)

Copiare testo negli appunti di Windows è una operazione molto comune e frequente, normalmente banale. In LightSwitch lo è un po' meno, per cui in questo post vediamo come fare partendo da quello che faremmo in Silverlight.

Supponendo di avere una TextBox che contiene il testo da copiare e un pulsante che esegua la copia, in Silverlight faremmo qualcosa di questo tipo:

        Private Sub CopiaTesto_Click(sender As Object, e As Windows.RoutedEventArgs)
                System.Windows.Clipboard.SetText(Me.TextBox1.Text)
        End Sub

Per quanto banale, questo codice ha una peculiarità: deve essere all'interno dell'evento Click di un qualcosa, poichè solo in questo modo Silverlight riconoscerà l'azione come avviata dall'utente e consentirà di eseguirla; diversamente solleverà un'eccezione di security e impedirà l'azione.

Passiamo ora a LightSwitch. Come sapete (lo sapete, vero? ) LightSwitch utilizza dietro le scene il pattern Model-View-ViewModel, pertanto non permette di accedere direttamente all'evento Click di un button, ma solo al method hook chiamato Execute. C'è un trucchetto chiaramente, che in realtà non vale solo per la copia di testo negli appunti ma per qualunque azione che deve essere avviata dall'utente, che permette di risalire all'evento Click di un pulsante. Ad esempio, questo codice va inserito in uno screen in cui ci sia un pulsante chiamato CopiaIndirizzo che copia il contenuto di una entity property:

        Private Sub CustomerDetail_Created()
            ' Si ottiene l'istanza del controllo e si punta al delegate da usare quando l'istanza è disponibile.
            Dim ctrl = Me.FindControl("CopiaIndirizzo")
            AddHandler ctrl.ControlAvailable, AddressOf CopiaIndirizzo_ControlAvailable
        End Sub
 
        ' Si converte l'istanza del controllo in un Button e qui si specifica l'handler per il Click.
        Private Sub CopiaIndirizzo_ControlAvailable(sender As Object, e As ControlAvailableEventArgs)             Dim button = CType(e.Control, System.Windows.Controls.Button)             AddHandler button.Click, AddressOf CopiaIndirizzo_Click         End Sub         ' Si invoca l'azione nel Click, di modo che sia autorizzata da Silverlight.
        Private Sub CopiaIndirizzo_Click(sender As Object, e As Windows.RoutedEventArgs)             Dispatchers.Main.Invoke(Sub()                                         Windows.Clipboard.SetText(Me.CustomerProperty.Address)                                     End Sub)         End Sub

E' importante ricordare che qualunque azione che si intraprenda in LightSwitch passa attraverso il dispatcher se l'azione stessa interagisce con qualunque elemento di interfaccia che non sia parte dello screen corrente.

And that's it.

Alessandro

Print | posted on venerdì 9 dicembre 2011 11:17 |

Powered by:
Powered By Subtext Powered By ASP.NET