Mario De Ghetto

Microsoft MVP – Visual Basic (VB.NET: Programmare che passione!)

Archivio per Gennaio 2008

[Visual Studio 2008] Edizione in italiano (2)

Pubblicato da Mario De Ghetto su 31 Gennaio 2008

Un aggiornamento a questo argomento che preme a molti programmatori italiani: in questo articolo, Gabriele Castellani (nel blog di MSDN Italia), preannuncia che stanno per essere pubblicate tutte le versioni di Visual Studio 2008 in italiano:

http://blogs.msdn.com/italy/archive/2008/01/29/visual-studio-2008-in-italiano.aspx

In particolare è interessante notare che sono già state rese disponibili delle versioni Trial, dei Service Pack e dei Language Pack già scaricabili in italiano.

Pubblicato su Novità | Contrassegnato da tag: , , | Lascia un commento »

Libro su Visual C# 2008

Pubblicato da Mario De Ghetto su 30 Gennaio 2008

Un’altra novità sul fronte dei miei libri: oltre ad avere quasi finito il libro su Visual Basic 2008, ho appena firmato un altro contratto con la FAG per scrivere anche un libro su Visual C# 2008!

Appena ci saranno novità sul fronte di questi due nuovi libri, le comunicherò tramite questo blog, così come tutto quello che riguarderà capitoli di esempio, sorgenti, eventuali errata corrige successive alla pubblicazione dei libri ecc. ecc..

Pubblicato su Novità | Contrassegnato da tag: , , | Lascia un commento »

Microsoft Code Gallery

Pubblicato da Mario De Ghetto su 30 Gennaio 2008

Microsoft ha aperto un nuovo servizio sotto il sito msdn.microsoft.com e precisamente un sito dove è possibile condividere codice sorgente .NET: esempi, suggerimenti e semplici frammenti.

Il sito si trova all’indirizzo http://code.msdn.microsoft.com/.

Pubblicato su Novità | Lascia un commento »

#17 Identificare il sistema operativo

Pubblicato da Mario De Ghetto su 30 Gennaio 2008

Ecco una semplice funzione per identificare il sistema operativo sul quale viene eseguita l’applicazione:

Public Function GetOSVersion() As String
   Select Case Environment.OSVersion.Platform
      Case PlatformID.Win32S
         Return "Win 3.1"
      Case PlatformID.Win32Windows
         Select Case Environment.OSVersion.Version.Minor
            Case 0
               Return "Win 95"
            Case 10
               Return "Win 98"
            Case 90
               Return "Win ME"
            Case Else
               Return "Sconosciuto"
         End Select
      Case PlatformID.Win32NT
         Select Case Environment.OSVersion.Version.Major
            Case 3
               Return "NT 3.51"
            Case 4
               Return "NT 4.0"
            Case 5
               Select Case _
                     Environment.OSVersion.Version.Minor
                  Case 0
                     Return "Win 2000"
                  Case 1
                     Return "Win XP"
                  Case 2
                     Return "Win 2003"
               End Select
            Case Else
               Return "Sconosciuto"
         End Select
      Case PlatformID.WinCE
         Return "Win CE"
   End Select
End Function

Pubblicato su Tips | 4 Commenti »

[VB.NET-C#] Convertitore di codice VB.NET-C#

Pubblicato da Mario De Ghetto su 30 Gennaio 2008

Se avete la necessità di convertire delle porzioni di codice o intere classi da VB.NET a C# e viceversa, potete utilizzare questa utile pagina gratuita:

http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx

Per utilizzarla, prima scegliete il linguaggio (VB.NET o C#) e inserite o incollate il codice. Poi premete il pulsante “Convert to…” e aspettate: poco dopo avrete il codice convertito nell’altro linguaggio!

Pubblicato su Articoli vari | Contrassegnato da tag: , , | Lascia un commento »

Malware (blacklist)

Pubblicato da Mario De Ghetto su 30 Gennaio 2008

Ho avuto una segnalazione di un paio di indirizzi che elencano tutta una serie di indirizzi IP e di domini da evitare e, se possibile, mettere in “black list”:

http://maipiugromozon.blogspot.com/2007/01/lista-ip-da-bloccare.html

http://punto-informatico.it/b.aspx?i=1926381&m=1927740

Spesso questi siti propongono dei servizi di statistiche “free” per il vostro sito, ma in realtà celano al loro interno dei “spara-malware”, quindi fate attenzione ai servizi free che utilizzate!

Pubblicato su Sicurezza | Contrassegnato da tag: | Lascia un commento »

[WPF] Grafici

Pubblicato da Mario De Ghetto su 29 Gennaio 2008

Ecco un esempio interessante per creare grafici con il Framework .NET 3.0:
http://www.codeproject.com/useritems/swordfishcharts.asp

Pubblicato su WCF, WPF, WF | Contrassegnato da tag: | 1 Commento »

[SQL Server 2005] Feature Pack (con provider “Native Client”)

Pubblicato da Mario De Ghetto su 29 Gennaio 2008

Un lettore ha chiesto come si fa ad installare il provider “SQL Server Native Client“.
Prendendo spunto da questa richiesta, segnalo questa pagina, nella quale c’è sia il file redistribuibile per l’installazione del provider in questione, sia numerose altre singole installazioni di versioni più recenti dei componenti redistribuibili, dei provider e dei componenti di SQL Server per la compatibilità con le versioni precedenti.
Il tutto prende il nome di “Feature Pack per Microsoft SQL Server 2005 – Aprile 2006“.
Dal nome si capisce che è una pagina (relativamente) “vecchia”, ma evidentemente poco nota…

Pubblicato su SQL Server | Contrassegnato da tag: , , | Lascia un commento »

[ASP.NET 2.0] Templates già pronti per l’uso

Pubblicato da Mario De Ghetto su 29 Gennaio 2008

Segnalo un link dal quale è possibile scaricare ben 9 templates di siti in ASP.NET 2.0, ognuno dei quali è corredato da un documento Word che ne spiega il contenuto:
http://msdn2.microsoft.com/en-us/asp.net/aa336613.aspx

Chi volesse leggere un’introduzione ai Template può trovare un articolo qui (in inglese).

Pubblicato su ASP.NET | Contrassegnato da tag: | 1 Commento »

[ASP.NET 2.0] Creare report con ReportViewer

Pubblicato da Mario De Ghetto su 29 Gennaio 2008

Un articolo di Code Project mostra come realizzare dei report con ReportViewer in un’applicazione ASP.NET 2.0.
Anche in questo caso è fornito un esempio visuale molto dettagliato, basato sulla progettazione con Visual Studio 2005 e su SQL Server 2005.

Pubblicato su ASP.NET, Novità, SQL Server | Contrassegnato da tag: , , , | Lascia un commento »

[Visual Studio 2008] Edizione in italiano

Pubblicato da Mario De Ghetto su 29 Gennaio 2008

In un’intervista pubblicata su PuntoInformatico, Francesca Longoni di Microsoft ha riferito che la versione italiana di Visual Studio 2008 uscirà a metà Febbraio:

http://punto-informatico.it/p.aspx?i=2173451&p=2

Pubblicato su Novità | Contrassegnato da tag: , , | 1 Commento »

CyberInstaller Suite 2008 v. 1.0

Pubblicato da Mario De Ghetto su 28 Gennaio 2008

Alcuni giorni fa è stata annunciata l’uscita della nuova versione di CyberInstaller Suite 2008 v. 1.0 (http://www.silvercybertech.com/italian/index.html).

Segnalo che, ieri, è stata rilasciata anche una patch che aggiorna i moduli Studio e Installer. Qui i dettagli: http://community.visual-basic.it/sergio/archive/2008/01/17/21671.aspx.

Pubblicato su Novità | Contrassegnato da tag: | Lascia un commento »

[VB 2005] Creare immagini da file PDF

Pubblicato da Mario De Ghetto su 27 Gennaio 2008

Code Project ha pubblicato l’articolo “Recursively create thumbnails from PDF files” che spiega come si può, in VB 2005, creare ricorsivamente delle immagini da file PDF.
Non riesco ad immaginare un’applicazione dove possa servire questa funzionalità, ma intanto “la mettiamo da parte”: prima o poi a qualcuno servirà ;-)

Pubblicato su Articoli vari | Contrassegnato da tag: , | Lascia un commento »

[Framework .NET 3.0] Un esempio basato su WPF

Pubblicato da Mario De Ghetto su 26 Gennaio 2008

Su CodeProject è stato pubblicato un articolo con un esempio di WPF (Windows Presentation Foundation) del nuovo Framework .NET 3.0.

Questo, a mio avviso, è un articolo veramente spettacolare perché offre anche molte immagini di quello che si può ottenere con WPF. L’impatto visivo è ottimo.

Pubblicato su WCF, WPF, WF | Contrassegnato da tag: , | 1 Commento »

[Framework .NET 3.0] Un esempio basato su WCF (eng)

Pubblicato da Mario De Ghetto su 26 Gennaio 2008

Su CodeProject è stato pubblicato un articolo (ovviamente in inglese) che fornisce un esempio basato su WCF (Windows Communication Foundation) del nuovo Framework .NET 3.0.
L’esempio è corredato dal codice sorgente.

Pubblicato su WCF, WPF, WF | Contrassegnato da tag: , | Lascia un commento »

[Framework .NET 3.0] Un articolo introduttivo (eng)

Pubblicato da Mario De Ghetto su 26 Gennaio 2008

Su CodeProject è stato pubblicato un articolo introduttivo di Anil Kr. Sharma (un programmatore indiano) sul nuovo Framework .NET 3.0 dal titolo “.NET Framework 3.0 buffet”.
Gli argomenti trattati riguardano le novità di questa nuova versione, in particolare:
• architettura di sistema
• Windows Workflow Foundation (WWF)
• Windows Communication Foundation (WCF)
• Windows CardSpace (WCS)
• Windows Presentation Foundation (WPF)

Pubblicato su Articoli vari | Contrassegnato da tag: | 1 Commento »

[ADO.NET 2.0] Accesso dati con VB 2005

Pubblicato da Mario De Ghetto su 26 Gennaio 2008

Un iscritto a VB T&T (Antonio1981) ha segnalato il seguente articolo che tratta l’accesso ai dati ad un database in Access con Visual Basic 2005 e ADO.NET 2.0: http://www.ilsoftware.it/articoli.asp?ID=3219&pag=0.

L’articolo spiega in modo abbastanza dettagliato le operazioni da fare per:
- creare un nuovo progetto
- effettuare una connessione con la procedura “Configurazione guidata origine dati”
- creare un DataSet
- visualizzare dei dati
- utilizzare il “generatore di query”
- visualizzare i dati con “DataGridView”
- creare e utilizzare query SQL con parametri.

Nella pagina segnalata c’è inoltre un link (con l’icona di una stampante) che apre l’articolo in una forma più comodamente stampabile.

Pubblicato su ADO.NET | Contrassegnato da tag: , | Lascia un commento »

[GIS] Componenti free per gestione mappe

Pubblicato da Mario De Ghetto su 26 Gennaio 2008

Alla pagina https://mapguide.osgeo.org/ è possibile scaricare un software open source multipiattaforma che permette di realizzare applicazioni che lavorano con mappe geospaziali (GIS = Geographic Information System).

E’ supportato su diversi sistemi operativi (Windows e Linux), diversi web server (Apache e IIS), diversi browser (Internet Explorer, Firefox e Safari) e diversi ambienti di programmazione e linguaggi (PHP, .NET 2.0 e JAVA).

Come si fa a non provarlo?    :-)

Pubblicato su Software HW e Windows | Contrassegnato da tag: | Lascia un commento »

[VB6] Le funzionalità della ShellExecute

Pubblicato da Mario De Ghetto su 26 Gennaio 2008

Alla pagina http://www.foxitaly.com/risorsetecniche/ShellApplication.htm è possibile trovare numerosissimi utilizzi di ShellExecute:

  • Windows Explorer in un certa directory
  • lanciare un eseguibile passando anche dei parametri
  • lanciare un file che ha un programma associato nel sistema operativo
  • aprire il programma predefinito di e-mail sul sistema
  • lanciare diverse componenti del Control Panel
  • aprire Internet Explorer con una certa pagine web
  • registrare una DLL, un ActiveX Control (.ocx file) o un OLE COM EXE
  • chiudere la sessione windows
  • sospendere il PC
  • lanciare diversi sottoprogrammi del sistema operativo
  • gestione delle finestre aperte in Windows
  • aprire un elemento del “Control Panel”
  • aprire la finestra “Date/Time Properties”.

Pubblicato su VB6-VBA | Contrassegnato da tag: , | Lascia un commento »

[Motori di ricerca] Cercare con successo informazioni su Internet

Pubblicato da Mario De Ghetto su 26 Gennaio 2008

Questo articolo di Punto Informatico riguarda le ricerche su Internet con i comuni motori di ricerca (Google, Altavista ecc.).
Molti scrivono nei forum dicendo “ho cercato e non ho trovato”. Probabilmente non hanno cercato bene, non hanno cercato con gli strumenti giusti (ricerca avanzata, per esempio) o non hanno cercato con sufficiente pazienza.
Internet espone centinaia di migliaia o milioni di documenti sui vari argomenti ed è improbabile che si possa trovare tutto subito, bisogna raffinare il metodo di ricerca e tentare diverse combinazioni di parole e/o sinonimi, provare, provare, provare.
Un consiglio che si può dare, specialmente nell’ambito della tecnologia e dell’informatica, è quello di tentare anche parole e/o frasi in lingua inglese: infatti molto ottimo materiale si trova non tradotto in italiano.

Pubblicato su Novità | Contrassegnato da tag: | Lascia un commento »

[Office 2007] Microsoft libera la GUI di Office 2007

Pubblicato da Mario De Ghetto su 26 Gennaio 2008

In questo articolo di Punto Informatico si parla della licenza a costo zero che Microsoft ha definito per gli sviluppatori che vogliono creare programmi con un “look & feel” simile a quello del nuovo Office. A partire da questa pagina sarà possibile scaricare le linee guida per l’utilizzo del nuovo oggetto “Ribbon” di Office.

Una limitazione importante è che la licenza non può essere stipulata da chi crea programmi in diretta concorrenza con Office (es. OpenOffice), mentre chi sviluppa add-in o estensioni per Office 2007 non è tenuto a stipulare tale licenza.

Un’altra considerazione importante sulle funzionalità di Office 2007: se non si attiva la copia installata entro 25 giorni, Office si imposta automaticamente in una modalità ridotta (detta “Reduced Functionality Mode”) che non permette la creazione, la modifica e il salvataggio di documenti. Questa modalità ridotta non è prevista per le aziende, per le quali è sufficiente una product key valida.

Pubblicato su Software HW e Windows | Contrassegnato da tag: | Lascia un commento »

La ballata del programmatore

Pubblicato da Mario De Ghetto su 25 Gennaio 2008

Segnalo questa pagina che permette di ascoltare “La ballata del programmatore”, una simpatica variante della canzone “Il pescatore” di Fabrizio De André:

http://www.derelitti.com/ballata_del_programmatore/

Pubblicato su Senza Categoria | Lascia un commento »

#16 Inviare e-mail in formato HTML con allegati

Pubblicato da Mario De Ghetto su 25 Gennaio 2008

Per inviare un’e-mail con allegati e per di più in formato HTML non c’è niente di meglio che una manciata di codice VB.NET, come potete vedere dal seguente codice:

Imports System.Text
Public Class Form1
    Dim strBody As _
        New StringBuilder("Ciao da Mario De Ghetto!,")
    Dim objMail As New System.Net.Mail.MailMessage()
    Dim strPath As String = "C:\prova.txt"
    Dim strFrom As String = "mittente@dominio.com"
    Dim strTo As String = "destinatario@libero.it"
    Private Sub Button1_Click(ByVal sender _
            As System.Object, _
            ByVal e As System.EventArgs) _
            Handles Button1.Click
        strBody.Append("<br>")
        strBody.Append("<br>")
        strBody.Append("<strong>Testo di prova</strong>")
        strBody.Append("<br>")
        strBody.Append("<br>")
        strBody.Append("<br>")
        strBody.Append("Cordiali saluti.")
        strBody.Append("<br>")
        strBody.Append("Ditta XYZ")
        strBody.Append("<br>")
        Dim frmaddress As _
            New System.Net.Mail.MailAddress(strFrom)
        Dim attachement As _
            New System.Net.Mail.Attachment(strPath)
        objMail.To.Add(strTo)
        objMail.From = frmaddress
        objMail.Subject = "Invio documento allegato: " & strPath
        objMail.Priority = Net.Mail.MailPriority.High
        objMail.IsBodyHtml = True
        objMail.Body = strBody.ToString
        If strPath <> "" Then
            objMail.Attachments.Add(attachement)
        End If
        Dim SmtMail As _
            New System.Net.Mail.SmtpClient("smtp.libero.it")
        SmtMail.Send(objMail)
        MessageBox.Show("Mail spedita!")
    End Sub
End Class  

Il codice è abbastanza chiaro. Ovviamente dovrete personalizzare i dati, come l’indirizzo del vostro server SMTP, l’indirizzo del mittente e del destinatario e così via. Se vi auto-inviate l’e-mail, potrete verificare che effettivamente c’è l’allegato e che il testo è in formato HTML.

Pubblicato su Tips | Contrassegnato da tag: , , | 5 Commenti »

VB 2005/2008: connessione a database con ADO.NET 2.0 (2)

Pubblicato da Mario De Ghetto su 24 Gennaio 2008

Sollecitato da un lettore che mi ha chiesto chiarimenti sul mio primo articolo (http://deghetto.wordpress.com/2008/01/13/vb-20052008-connessione-a-database-con-adonet-20/), mi accingo a spiegare una questione riguardante il file di configurazione dell’applicazione, cioè il famigerato file “Settings.settings“.

Prima di tutto ho creato un esempio completo che potete scaricare all’indirizzo http://www.deghetto.it/blog/download/mdgADONET20connectionString.zip e che deve essere decompresso nella cartella di prova C:\VB2005\. Chissà perché non l’ho pubblicato prima?    :-)

Veniamo ora alla spiegazione in merito ai dubbi che l’articolo ha sollevato in merito al file “Settings.settings”: questo file non è necessario nel file compilato! Come vedrete nel progetto di prova, nella cartella “bin” ci sono due sottocartelle:

  • il programma compilato nella versione “debug”, che è la compilazione classica in ambiente di sviluppo, perché include anche i simboli di debug, utili appunto nel momento dell’esecuzione controllata dall’ambiente di sviluppo;
  • il compilato nella versione “release”, nella quale i simboli di debug sono stati eliminati (migliorando le prestazioni finali del programma).

Per impostare la compilazione della release bisogna modificare un’opzione nel menu “Genera > Gestione configurazione…” e poi cambiare “Configurazione soluzione attiva” da debug a release oppure modificando la stessa opzione a livello di singolo progetto, nella parte inferiore della stessa finestra. Nel nostro caso lo facciamo a livello di soluzione.

Dopo aver cambiato questa impostazione, scegliendo il menu “Genera > Genera mdgADONET20connectionString” ci troviamo con il compilato nella cartella .\bin\release.

In questa cartella c’è un file di nome mdgADONET20connectionString.exe.config che non è altro che il file di configurazione dell’applicazione. E’ un file di testo e, precisamente, in formato XML e contiene la stringa di connessione che avevamo definito a livello di ApplicationSettings

Per verificare che effettivamente viene utilizzato quel file di configurazione, potete provare questa sequenza di operazioni:

  • cambiare il nome al database DBprova.mdb in (per esempio) prova.mdb;
  • eseguire il file .\bin\release\mdgADONET20connectionString.exe epremere il pulsante “ApriDBaccess”: l’applicazione solleverà un’eccezione e potrete solo chiuderla;
  • modificare il file mdgADONET20connectionString.exe.config con NotePad (Blocco note), cambiando la stringa di connessione nel punto dove è indicato il nome del database (da DBprova.mdb a prova.mdb) e salvare il file;
  • eseguire nuovamente il programma .\bin\release\mdgADONET20connectionString.exe e cliccare di nuovo sul pulsante di apertura del database: a questo puntoriceverete il messaggio di conferma di apertura del file.

Questo dimostra che va distribuito tutto il contenuto della cartella release e non solo il file eseguibile.

Pubblicato su ADO.NET | Contrassegnato da tag: , , , , | 5 Commenti »

[ASP.NET 2.0]: user control in VB e in C# nello stesso sito

Pubblicato da Mario De Ghetto su 23 Gennaio 2008

Introduzione
Fin dall’uscita di Visual Studio 2005, mi ha affascinato la possibilità di utilizzare diversi linguaggi nello stesso progetto.
Il principio è semplice, ma allo stesso tempo geniale: dato che ogni parte del codice di un linguaggio viene tradotta in un linguaggio intermedio (MSIL), è possibile combinare sorgenti di linguaggi differenti, per esempio VB e C#, per creare un progetto unico.
Questo fatto agevola soprattutto i team composti da programmatori con diverse competenze e conoscenze, dove alcuni conoscono meglio C# e altri conoscono meglio VB, ma agevola anche il programmatore “solitario”, facilitandogli l’uso dei molti esempi e componenti già pronti disponibili su Internet.In questo articolo vedremo in modo estremamente semplice come si possono applicare questi principi anche alla programmazione web. Infatti in un sito web si possono utilizzare pagine scritte in linguaggi diversi, ma anche user control con la stessa caratteristica.

Il progetto è in sé banale: creiamo due user control, uno scritto in VB e uno, sostanzialmente identico, scritto in C# per la visualizzazione della data e ora del server web. Questi user control sono utili per verificare l’ora del server, magari quando il nostro sito è in hosting all’estero.

Creazione del progetto
Naturalmente la prima cosa da fare è creare una normale applicazione web:

  1. File/Nuovo sito web
  2. Selezionare “Sito web ASP.NET“, scegliere la cartella dove posizionare il progetto (per esempio C:\VB2005\UserControl) e scegliere il linguaggio predefinito (in questo articolo preferisco cominciare con VB);
  3. Alla conferma avremo la nostra pagina Default.aspx vuota: aggiungiamo alcune stringhe di testo, giusto per vedere qualcosa.

A questo punto la pagina web sarà così formata:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb"
Inherits="_Default" %>
<!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>Pagina senza titolo</title>
</head>
<body style="font-size: 12pt">
    <form id="form1" runat="server">
    <div>
        <span style="color: darkorange; font-family: Verdana">
        <strong>HOME PAGE<br />
        </strong><span style="color: black">
            <br />
            Prova di controllo personalizzato con VB<br />
            <br />
            <br />
            <br />
            Prova di controllo personalizzato con C#<br />
            <br />
            <br />
        </span></span>
    </div>
    </form>
</body>
</html>

Creazione di uno User Control in VB
Procediamo ora alla creazione di uno user control con il linguaggio VB:

  1. nella finestra “Esplora Soluzioni“, fare clic con il tasto destro del mouse sul nome del progetto e selezionare “Aggiungi Nuovo Elemento…”;
  2. nella finestra di dialogo scegliere “Controllo utente web“, modificare il nome in “TimeVB.ascx” e, lasciando invariato il linguaggio (VB), confermare;
  3. fare doppio clic su “TimeVB.ascx” e inserire un controllo Label nella finestra di progettazione del controllo e modificare il suo ID in “LabelVB“.
  4. Nel file “TimeVB.ascx.vb“, invece, inserire il seguente codice:
Partial Class TimeVB
    Inherits System.Web.UI.UserControl
    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Me.Load
        Dim dt As DateTime = DateTime.Now
        LabelVB.Text = String.Concat("Ora del server: ", dt.ToString)
    End Sub
End Class

Come è possibile vedere, abbiamo dichiarato una variabile dt di tipo DateTime, assegnandole la data e ora attuale. Subito dopo abbiamo assegnato alla proprietà Text della LabelVB la stringa composta da una stringa letterale e la data e ora convertita in testo con il metodo ToString.

Aggiungiamo ora il controllo nella pagina web: torniamo alla pagina Default.aspx, prendiamo con il mouse il file TimeVB.ascx e lo trasciniamo nella posizione voluta (cioè dopo la stringa “Prova di controllo personalizzato con VB” presente nella pagina).

Se a questo punto eseguiamo il progetto con F5, otterremo l’effetto voluto: abbiamo la nostra data e ora visualizzati nella pagina.

Creazione di uno User Control in C#
Procediamo nello stesso modo per creare lo user control in C#:

  1. nella finestra “Esplora Soluzioni“, fare clic con il tasto destro del mouse sul nome del progetto e selezionare “Aggiungi Nuovo Elemento…”;
  2. nella finestra di dialogo scegliere “Controllo utente web“, modificare il nome in “TimeCS.ascx” e, dopo aver modificato il linguaggio in “Visual C#“, confermare;
  3. fare doppio clic su “TimeCS.ascx” e inserire un controllo Label nella finestra di progettazione del controllo e modificare il suo ID in “LabelCS“;
  4. nel file “TimeCS.ascx.cs“, invece, inserire il seguente codice:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class TimeCS : System.Web.UI.UserControl
{
  protected void Page_Load(object sender, EventArgs e)
  {
    DateTime dt = DateTime.Now;
    LabelCS.Text = string.Concat("Ora del server: ", dt);
  }
}

Anche questa volta aggiungiamo il controllo nella pagina web: torniamo alla pagina Default.aspx, prendiamo con il mouse il file TimeCS.ascx e lo trasciniamo nella posizione voluta (cioè dopo la stringa “Prova di controllo personalizzato con C#” presente nella pagina).

Eseguiamo nuovamente il progetto con F5 per verificare che entrambi i controlli, scritti in VB e in C#, funzionino correttamente.

Per differenziare le due versioni del controllo possiamo anche cambiare qualche proprietà dei controlli Label inseriti nei due controlli, magari cambiandone i colori, il font e quant’altro si desideri, così come ho fatto nell’esempio allegato a questo articolo.

La pagina default.aspx finale
Diamo ora uno sguardo alla pagina Default.aspx finale, dopo l’aggiunta dei due controlli utente:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb"
Inherits="_Default" %><%@ Register src="TimeCS.ascx"
mce_src="TimeCS.ascx" TagName="TimeCS" TagPrefix="uc2" %> 

<%@ Register src="TimeVB.ascx" mce_src="TimeVB.ascx" TagName="TimeVB" TagPrefix="uc1" %>
<!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 id="Head1" runat="server">
    <title>Pagina senza titolo</title>
</head>
<body style="font-size: 12pt">
    <form id="form1" runat="server">
    <div>
        <span style="color: darkorange; font-family:
        Verdana"><strong>HOME PAGE<br />
        </strong><span style="color: black">
            <br />
            Prova di controllo personalizzato con VB<br />
            <uc1:TimeVB ID="TimeVB1" runat="server" />
            <br /> 

            <br />
            <br />
            Prova di controllo personalizzato con C#<br />
            <uc2:TimeCS ID="TimeCS1" runat="server" />
            <br />
            <br />
        </span></span>
    </div>
    </form>
</body>
</html>

Ci sono due elementi da notare: il primo è che sono state aggiunte due direttive per la registrazione dei due controlli che abbiamo aggiunto alla pagina:

<%@ Register src="TimeCS.ascx" mce_src="TimeCS.ascx"
    TagName="TimeCS" TagPrefix="uc2" %>
<%@ Register src="TimeVB.ascx" mce_src="TimeVB.ascx"
    TagName="TimeVB" TagPrefix="uc1" %>

mentre il secondo è costituito dai due tag che inseriscono ciascun controllo utente nella posizione della pagina che abbiamo stabilito:

<uc1:TimeVB ID="TimeVB1" runat="server" /> <uc2:TimeCS ID="TimeCS1" runat="server" />

Conclusioni
I controlli utente che abbiamo creato sono estremamente banali, ma l’obiettivo di questo articolo era quello di mostrare come si crea e si inserisce un controllo utente e come possono essere create delle parti dell’applicazione web scritte in linguaggi differenti.

Un’altra particolarità interessante dei controlli utente è il fatto che nella finestra di progettazione del controllo stesso possono essere inseriti più “controlli-base”. Per esempio possono essere inseriti una Label, una Textbox e un ListBox: in questo caso il controllo utente sarà un controllo composto da tutti i controlli che sono stati inseriti al suo interno, semplificando il riutilizzo di componenti complessi (per esempio un controllo per inserire in un colpo solo un “form” di login). Questa possibilità, estremamente semplice da provare, non è mostrata in questo esempio ma viene lasciata come esercizio al lettore.

L’esempio è scaricabile da qui.

Pubblicato su ASP.NET | Contrassegnato da tag: , , , | Lascia un commento »

#15 Ricerca del primo ed ultimo giorno del mese

Pubblicato da Mario De Ghetto su 23 Gennaio 2008

Queste 2 funzioni, abbastanza simili, calcolano rispettivamente la data del primo giorno e dell’ultimo giorno del mese.
I valori restituiti sono 2:

  • PrimoGiornoDelMese e UltimoGiornoDelMese restituiscono una stringa contenente il nome del giorno della settimana
  • i parametri dataPrimoGiorno e dataUltimoGiorno passati per riferimento vengono modificati per restituire la corrispondente data del primo e dell’ultimo giorno
  Public Function PrimoGiornoDelMese(ByVal data _
          As Date, ByRef dataPrimoGiorno As Date) As String
  ' Parametri di input:
    ' - data:            una data di riferimento per i calcoli
    ' - dataPrimoGiorno: parametro passato per riferimento e
    '                    modificato dalla funzione
    '
  ' Parametri di output:
    ' - PrimoGiornoDelMese: stringa contenente il nome del primo
    '                       giorno del mese
    ' - dataPrimoGiorno:    data del primo giorno del mese
   
    Dim numeroGiornoSettimana As Integer
    ' creazione array con nomi della settimana:
    Dim nomiGiorniSettimana As String() =
        ("Domenica", "Lunedì", "Martedì", _
        "Mercoledì", "Giovedì", "Venerdì", "Sabato"}    

    ' conversione della data da formato stringa (gg/mm/aaaa) a
    ' formato DateTime
    dataPrimoGiorno =
        DateTime.Parse("01/" & data.Month & _
            "/" & data.Year)    

    ' calcolo del numero del giorno della settimana (da 0 a 6)
    numeroGiornoSettimana = dataPrimoGiorno.DayOfWeek
   
    ' estrazione del nome del giorno della settimana in base al
    ' numero calcolato nell'istruzione precedente
    PrimoGiornoDelMese = nomiGiorniSettimana(numeroGiornoSettimana)
   
  End Function
  Public Function UltimoGiornoDelMese(ByVal data _
          As Date, ByRef dataUltimoGiorno As Date) As String
  ' Parametri di input:
    ' - data:             una data di riferimento per i calcoli
    ' - dataUltimoGiorno: parametro passato per riferimento e
    '                     modificato dalla funzione
    '
  ' Parametri di output:
    ' - UltimoGiornoDelMese: stringa contenente il nome dell'ultimo
    '                        giorno del mese
    ' - dataUltimoGiorno:    data dell'ultimo giorno del mese
   
    Dim numeroGiornoSettimana As Integer
    ' creazione array con nomi della settimana:
    Dim nomiGiorniSettimana As String() = _        
        {"Domenica", "Lunedì", "Martedì", _
        "Mercoledì", "Giovedì", "Venerdì", "Sabato"}
                                           
    ' conversione della data da formato stringa (gg/mm/aaaa) a
    ' formato DateTime
    dataUltimoGiorno = _
        DateTime.Parse(data.DaysInMonth(data.Year, _
            data.Month) & "/" & data.Month & "/" & data.Year)
                                     
    ' calcolo del numero del giorno della settimana (da 0 a 6)
    numeroGiornoSettimana = dataUltimoGiorno.DayOfWeek
   
    ' estrazione del nome del giorno della settimana in base al
    ' numero calcolato nell'istruzione precedente
    UltimoGiornoDelMese = _
        nomiGiorniSettimana(numeroGiornoSettimana)
  End Function

Per testare le funzioni di cui sopra, questo è del codice che può essere inserito nell’evento Load di una form o nell’evento Click di un pulsante:

  Dim dataPrimoGiorno As Date
  Dim dataUltimoGiorno As Date    

  ' calcolo il nome e la data del primo e dell'ultimo giorno
  ' di Maggio 2008
  System.Windows.Forms.MessageBox.Show("" & _      
      PrimoGiornoDelMese(#5/17/2008#, _
      dataPrimoGiorno) & " " & dataPrimoGiorno)
  System.Windows.Forms.MessageBox.Show("" & _
      UltimoGiornoDelMese(#5/17/2008#, _
      dataUltimoGiorno) & " " & dataUltimoGiorno)    

  ' calcolo il nome e la data del primo e dell'ultimo
  ' giorno di Marzo 2008
  System.Windows.Forms.MessageBox.Show("" & _
      PrimoGiornoDelMese(#3/19/2008#, _
      dataPrimoGiorno) & " " & dataPrimoGiorno)
  System.Windows.Forms.MessageBox.Show("" & _
      UltimoGiornoDelMese(#3/19/2008#, _
      dataUltimoGiorno) & " " & dataUltimoGiorno)

Pubblicato su Tips | Contrassegnato da tag: | Lascia un commento »

[VB.NET] Inviare e-mail

Pubblicato da Mario De Ghetto su 22 Gennaio 2008

Un articolo interessante di Jim Duffy, Visual Basic MVP, con la trattazione completa del namespace System.Net.Mail per l’invio di e-mail con VB.NET:

http://msdn2.microsoft.com/it-it/vbasic/bb630227.aspx

L’articolo espone le modalità per gestire un messaggio di posta elettronica, per inviarlo, per allegare file, per gestirne le eccezioni, per modificare alcune proprietà (nome visualizzato, indirizzo per il reply, priorità del messaggio, richiesta di ricevuta di ritorno), per includere nel messaggio delle immagini, per utilizzare SSL, per effettuare l’autenticazione e per spedire i messaggi in modo asincrono.

Pubblicato su Articoli vari | Contrassegnato da tag: | Lascia un commento »

Rilasciato ISObuster 2.3

Pubblicato da Mario De Ghetto su 21 Gennaio 2008

Nel sito ufficiale di ISObuster (http://www.isobuster.com/it/) è possibile scaricare la nuova versione 2.3 del prodotto.

Questo prodotto consente di aprire molti formati immagine di CD-ROM e DVD, come ad esempio i file ISO distribuiti da Microsoft per le proprie immagini da utilizzare per la masterizzazione dei supporti di installazione dei prodotti software.

Pubblicato su Novità | Contrassegnato da tag: , , | 1 Commento »

#14 Aprire un file PDF

Pubblicato da Mario De Ghetto su 21 Gennaio 2008

Per aprire un file PDF in VB6/VBA, con il programma predefinito (solitamente Acrobat Reader), è possibile utilizzare il seguente codice:

' Sezione dichiarazioni
Public Declare Function ShellExecute _
  Lib "shell32.dll" Alias "ShellExecuteA" _
  (ByVal hwnd As Long, ByVal lpszOp As String, _
  ByVal lpszFile As String, ByVal lpszParams As String, _
  ByVal LpszDir As String, ByVal FsShowCmd As Long) As Long   

Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Sub ApriPDF(NomeFile As String)
  Const SW_SHOWNORMAL As Long = 1
  Const ERROR_BAD_FORMAT As Long = 11
  Const SE_ERR_ACCESSDENIED As Long = 5
  Const SE_ERR_ASSOCINCOMPLETE As Long = 27
  Const SE_ERR_DDEBUSY As Long = 30
  Const SE_ERR_DDEFAIL As Long = 29
  Const SE_ERR_DDETIMEOUT As Long = 28
  Const SE_ERR_DLLNOTFOUND As Long = 32
  Const SE_ERR_FNF As Long = 2         '  file non trovato
  Const SE_ERR_NOASSOC As Long = 31
  Const SE_ERR_PNF As Long = 3         '  percorso non trovato
  Const SE_ERR_OOM As Long = 8         '  memoria esaurita
  Const SE_ERR_SHARE As Long = 26   

  Dim Scr_hDC As Long
  Dim ret As Long
  Dim sMsg As String
  Dim risposta As Long   

  Scr_hDC = GetDesktopWindow()
  ret = ShellExecute(Scr_hDC, "Open", _
      App.Path & "\RELAZIONI\" & _
      NomeFile, "", App.Path & _
      "\RELAZIONI", SW_SHOWNORMAL)   

  If ret <= 32 Then  ' Si è verificato un errore
    Select Case ret
      Case SE_ERR_FNF
          sMsg = "File non trovato"
      Case SE_ERR_PNF
          sMsg = "Percorso non trovato"
      Case SE_ERR_ACCESSDENIED
          sMsg = "Accesso negato"
      Case SE_ERR_OOM
          sMsg = "Memoria esaurita"
      Case SE_ERR_DLLNOTFOUND
          sMsg = "DLL non trovata"
      Case SE_ERR_SHARE
          sMsg = "Violazione di condivisione"
      Case SE_ERR_ASSOCINCOMPLETE
          sMsg = "Associazione di file " & _
              incompleta o non valida"
      Case SE_ERR_DDETIMEOUT
          sMsg = "DDE Time out"
      Case SE_ERR_DDEFAIL
          sMsg = "DDE transazione fallita"
      Case SE_ERR_DDEBUSY
          sMsg = "DDE occupato"
      Case SE_ERR_NOASSOC
          sMsg = "Nessuna associazione per " & _
              "l'estensione del file"
      Case ERROR_BAD_FORMAT
          sMsg = "File EXE non valido o errore " & _
              "nell'immagine EXE"
      Case Else
          sMsg = "Errore sconosciuto"
    End Select   

    If ret = 31 Then
      ' non è installato Acrobat Reader
      risposta = MsgBox("ATTENZIONE: in questo sistema " & _
          "non è installato Acrobat Reader, necessario " & _
          "per visualizzare documenti PDF." & vbCrLf & vbCrLf & _
          "Per installare Acrobat Reader (vers. 5.1 italiana): " & _
          "premere SI" & vbCrLf & "Per annullare l'apertura " & _
          "del documento PDF: premere NO", _
          vbYesNo Or vbCritical, "Installare Acrobat Reader?")
      If risposta = vbYes Then
        ' risposta = SI
        ' ATTENZIONE: se il programma di setup di Acrobat Reader
        ' si trova in un altro percorso, modificare l'istruzione
        ' seguente
        Shell App.Path & "\SETUP\AdbeRdr60_ita_full_WinXP.exe", _
            vbNormalFocus
      Else
        ' risposta = NO
        MsgBox "Apertura documento PDF annullata.", vbInformation
      End If
    Else
      ret = MsgBox("ERRORE: n. " & ret & " - " & _
          sMsg, vbCritical, "ApriPDF")
    End If
  End If
End Sub

Pubblicato su Tips | Contrassegnato da tag: , , | 9 Commenti »

[Controlli free] Flash Control for ASP.NET 2.0

Pubblicato da Mario De Ghetto su 21 Gennaio 2008

Ho letto qualche richiesta, in passato, sulla possibilità di inserire un file .SWF (animazione Flash) in una pagina ASP.NET.

Il controllo scaricabile dalla pagina http://www.flash-control.net/ risolve questo problema. Le versioni disponibili sono tre:

  • free: ovviamente con molte limitazioni, come la mancanza del supporto AJAX, l’esclusione dal supporto tecnico e altro
  • a pagamento: con 29 Dollari portiamo a casa tutto, esclusi i sorgenti. Questa versione elimina anche il fastidioso messaggio “Fare clic per attivare e utilizzare il controllo”
  • con i sorgenti: versione completa di sorgenti, al costo di 399 Dollari.

In alternativa è possibile inserire un file .SWF (per esempio di nome “FileFlashDaEseguire.swf“) anche con il seguente script ASP.NET che esegue anche il “redirect” al sito Macromedia se non si ha Flash installato:

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=6,0,0,0"
WIDTH="100%" HEIGHT="100%" id="EW" ALIGN=""
VIEWASTEXT>
<PARAM NAME="movie" VALUE="EW.swf">
<PARAM NAME="quality" VALUE="high">
<PARAM NAME="bgcolor" VALUE="#7299BD">
<EMBED src="FileFlashDaEseguire.swf" quality="high" bgcolor="#7299BD"
WIDTH="100%" HEIGHT="100%" NAME="EW"
  ALIGN=""
TYPE="application/x-shockwave-flash"
PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>

Pubblicato su ASP.NET | Contrassegnato da tag: , , | Lascia un commento »