Attualità e Information Technology

August 25, 2007

Screenshot di una form in c#

Filed under: IT, .NET

Se volessimo, via codice, ottenere uno screenshot della nostra form potremmo utilizzare un codice come quello che vi riporto:

   10             Bitmap memoryImage = new Bitmap(Size.Width, Size.Height);

   11             Graphics memoryGraphics = Graphics.FromImage(memoryImage);

   12             memoryGraphics.CopyFromScreen(Location.X, Location.Y, 0, 0, Size, CopyPixelOperation.SourceCopy);

La chiave di tutto è il metodo CopyFromScreen della classe Graphics.

Si suppone che queste linee di codice vengano lanciate nella form che vuole essere catturata, infatti per le dimensioni si usa Size, cioè la property della form stessa.

Technorati tags , , ,

AddThis Social Bookmark Button

Casting

Filed under: IT, .NET

Spesso e volentieri quando si parla di casting si vedono parecchi errori e soprattutto si pensa sempre e solo alla classica notazione con il nome della classe tra parentesi tonde prima dell’oggetto da castare.

Qualora il tipo non sia corretto, viene generata un’eccezione di tipo InvalidCastException.

Ecco quindi che in uno scenario in cui si hanno 2 classi, Persona e Auto, per eseguire casting correttamente si devono definire all’interno di un blocco try-catch.

    1             Object obj = new Persona();

    2 

    3             try

    4             {

    5                 Auto auto = (Auto) obj;

    6                 MessageBox.Show(“E’ un’auto”);

    7             }

    8             catch(InvalidCastException)

    9             {

   10                 MessageBox.Show(“Non è un’auto”);

   11             }

Nell’esempio ovviamente il messaggio a video sarebbe “Non è un’auto”.

Le eccezioni sono però molto pesanti, quindi bisognerebbe sempre cercare di evitarle. Ecco quindi che vale la pena usare un altro approccio che ci permetta di risolvere il tutto solo con un blocco if-else invece che con un try-catch.

Abbiamo due possibilità: usare la parola chiave is oppure eseguire il cast attraverso la parola chiave as.

is ritorna un booleano, true se è possibile effettura il casting senza eccezione. Vediamo un esempio:

    1             Object obj = new Persona();

    2 

    3             if (obj is Auto)

    4                 MessageBox.Show(“E’ un’auto”);

    5             else

    6                 MessageBox.Show(“Non è un’auto”);

La caratteristica di as invece è che qualora il casting specificato non risulti valido allora la variabile viene iniziallizzata a null.

    1             Object obj = new Persona();

    2 

    3             Auto auto = obj as Auto;

    4             if (auto != null)

    5                 MessageBox.Show(“E’ un’auto”);

    6             else

    7                 MessageBox.Show(“Non è un’auto”);

Technorati tags , , ,

AddThis Social Bookmark Button
   

Get free blog up and running in minutes with Blogsome | Theme designs available here