domenica 30 giugno 2019

DatagridView salvare da una colonna immagine un file sul pc tramite VB.Net e C#

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_net-datagridview-salvare-da-una-colonna-_1627.aspx


In questo articolo vedremo come tramite i linguaggi di programmazione VB.Net e C#, viene valorizzato un controllo di tipo DatagridView, con il quale una colonna di tipo “DataGridViewImageColumn” visualizza l’immagine carica da un file presente nel pc.
Inoltre al click del mouse sull’immagine, viene data la possibilità di salvarlo sul pc l’immagine fornendo all’utente la possibilità di scegliere dove salvarla ed il nome.
Dopo questa introduzione, passiamo alla parte pratica.
Si apre Visual Studio .Net e si crea un progetto di tipo “Windows Application” utilizzando il linguaggio di proprio interesse.

Creazione del progetto

Si aggiunge sulla form un controllo DatagridView, e lo si imposta con tre colonne.
Le prime due, sono di tipo dati, mentre la terza sarà di tipo “DataGridViewImageColumn”
Per la prima colonna, impostare la proprietà “DataPropertyName” con il valore “Nominativo”, mentre per la seconda colonna, impostare la proprietà con il valore “CognomeNominativo” ed infine la terza, con il valore “Foto”.
In questo modo quando si caricano i dati verranno abbinati alle varie colonne i riferimenti alla fonte dati.
La form dovrà essere come quella mostrata in figura 1.



Figura 1 - la finestra con i controllo datagridView.

Stesura del codice

Ora non ci resta che scrivere il codice per gestire lo scenario.
Prima di tutto dobbiamo creare una classe con tre proprietà, due di tipo string, ed una di tipo Array Byte, che sarà quest’ultima quella che dovrà contenere l’immagine.
Naturalmente in questo modo simuliamo l’accesso ad una fonte dati, ma possiamo utilizzare anche un database appositamente configurato.
Qui di seguito la classe per entrambi i linguaggi.


VB.Net

Public Class OggettoNuovo

    Public Property nome As String

    Public Property Cognome As String

    Public Property Immagine As Byte()

End Class

 

C#

public class OggettoNuovo

    {

      public  string nome { get; set; }

      public string Cognome { get; set; }

      public byte[] Immagine { get; set; }

   

   

    }



La classe simula una fonte dati, con il quale verrà creato un oggetto di tipo lista, con le proprietà valorizzate nell’evento load della nostra form.
Ora dobbiamo creare una funzione, che restituisce un oggetto Image da un array di byte.
Questo può avvenire nel caso che nella nostra fonte dati, abbiamo salvato l’immagine in formato array byte.
Qui di seguito si riporta il frammento di codice per entrambi i linguaggi.


VB.Net

Private Function getImmagine(ByVal file As Byte()) As Image

        Using ms As MemoryStream = New MemoryStream(file)

            Dim returnImage As Image = Image.FromStream(ms)

            Return returnImage

        End Using

    End Function

C#

  private Image getImmagine(byte[] file)

        {

 

            using (MemoryStream ms = new MemoryStream(file))

            {

                Image returnImage = Image.FromStream(ms);

                return returnImage;

            }

       

        }

Continuando a scrivere il codice, ora dobbiamo creare una funzione, che permetta di ridimensionare l’immagine, perché dallo stream presente nella colonna di tipo immagine, potremmo avere problemi con la gestione della grafica.
Questa funzione, permette il ridimensionamento dell’immagine e quindi la creazione dalla array byte in file che sarà salvato sul nostro pc.
Qui di seguito la funzione per entrambi i linguaggi.


VB.Net

Public Shared Sub RidefinisciImmagine(ByVal image As Image, ByVal height As Integer, ByVal width As Integer, ByVal PercorsoNomeFile As String)

        Using nuovaBitmap As Bitmap = New Bitmap(image)

 

            Using ImmagineDaRidefinire As Bitmap = nuovaBitmap.Clone(New System.Drawing.Rectangle(0, 0, width, height), nuovaBitmap.PixelFormat)

 

                Using ImmagineCopiata As Bitmap = New Bitmap(ImmagineDaRidefinire.Width, ImmagineDaRidefinire.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb)

 

                    Using g As Graphics = Graphics.FromImage(ImmagineCopiata)

                        g.DrawImageUnscaled(ImmagineDaRidefinire, 0, 0)

                        ImmagineCopiata.Save(PercorsoNomeFile, System.Drawing.Imaging.ImageFormat.Jpeg)

                    End Using

                End Using

            End Using

        End Using

    End Sub

 

C#

public static void RidefinisciImmagine(Image image, int height, int width, string PercorsoNomeFile)

        {

            using (Bitmap nuovaBitmap = new Bitmap(image))

            {

                using (Bitmap ImmagineDaRidefinire = nuovaBitmap.Clone(new System.Drawing.Rectangle(0, 0, width, height), nuovaBitmap.PixelFormat))

                {

                    using (Bitmap ImmagineCopiata = new Bitmap(ImmagineDaRidefinire.Width, ImmagineDaRidefinire.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb))

                    {

                        using (Graphics g = Graphics.FromImage(ImmagineCopiata))

                        {

                            g.DrawImageUnscaled(ImmagineDaRidefinire, 0, 0);

                            ImmagineCopiata.Save(PercorsoNomeFile, System.Drawing.Imaging.ImageFormat.Jpeg);

                        }

                    }

                }

            }

        }






Concludiamo questa prima parte dell'articolo, nel quale troverà il dettaglio e funzionalità nella seconda ed ultima parte.

Conclusioni

Queta prima parte ha voluto fornire al lettore le funzioni principali per il salvataggio dei file di tipo immagini al click sulla colonna di tipo immagine.
Nella parte conslusiva dell'articolo, vedremo il relativo utilizzo e salvataggio.

venerdì 28 giugno 2019

Download di immagini gratuite



Se state cercando un sito con tante immagini gratuite per uso personale qui  https://freedesignfile.com/category/free-photo/ trovate un portale dove scaricare immagini di tipo foto gratuite.
Inoltre nel portale si trovano anche immagini vettoriale, font ed icone.

giovedì 27 giugno 2019

ML.Net 1.1 Intelligenza artificiale tramite .Net nuova versione

alt text
Come riportato dal seguente post https://devblogs.microsoft.com/dotnet/announcing-ml-net-1-1-and-model-builder-updates-machine-learning-for-net/ nella nuova versione 1.1 di ML.Net il Framework per la creazione di soluzioni di intelligenza artificiale, aggiornata la funzionalità di modellazione e precisamente il "Model Builder" con novità che semplificano il programmatore.
Per maggiori informazioni e download visitate il sito indicato.

mercoledì 26 giugno 2019

convert online database

Per coloro che sono alla ricerca di strumenti per la conversione di database o script in altri formati di database, dal seguente sito https://www.rebasedata.com/ possono utilizzare uno strumento online gratuito e senza registrazione per convertire database in altri formati o creazione di script.

Il sito è in lingua inglese.

martedì 25 giugno 2019

C# Textbox solo numerica con virgola

Nel frammento di codice qui di seguito, una tecnica di come rendere la textbox che accetta solo numeri, back space e virgola in C#.


 private void txtImporto_KeyPress(object sender, KeyPressEventArgs e)
        {

            if ((e.KeyChar != (char)Keys.Back) && (!char.IsNumber(e.KeyChar.ToString(), 0)) && e.KeyChar != 44  )
                e.Handled = true;
            if (e.KeyChar == 44 && txtImporto.Text.Split(',').Count() > 1)
            {
                e.Handled = true;
            }
        }


lunedì 24 giugno 2019

Offerte di lavoro in ambito tecnologico

Numerose le offerte di lavoro in ambito IT, tra sistemisti, programmatori, dba, ed altre figure di grande spicco a livello nazionale che troviamo nel portale Iprogrammatori, qui https://www.iprogrammatori.it/lavoro/
Il sito è un punto di riferimento da circa 20 anni per tutti gli informatici nel quale trovare articoli e notizie in tale ambito, ma anche una sezione dedicate alle offerte di lavoro.

domenica 23 giugno 2019

.Net - creare un programma da utilizzare in Task Scheduler tramite VB.Net e C#

Si riporta un articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_net-creare-un-programma-da-utilizzare-in_1623.aspx

In questo articolo vedremo l’utilizzo di una funzionalità interessante di Windows Server, riguardante l’esecuzione di un programma eseguibile da eseguirsi ogni 5 minuti.
Realizzeremo una console application, che scriverà in un file di Log, tramite la libreria Log4net del testo in un file, che riguarderà il log.
Questo scenario si può verificare nel caso che dobbiamo eseguire dei batch, ossia operazioni costanti durante l’arco della giornata o schedulati in particolari giorni, in ambito di rete aziendale.
Gli ambiti usati in questo caso possono essere quelli bancario, finanziario ed assicurativo che fanno un grande uso dei programmi eseguiti senza interfaccia grafica ma che devono compiere operazioni quotidiane.

Creazione del programma


Dopo aver aperto Visual Studio e scelto il linguaggio di proprio interesse, selezionate come progetto, il modello “Console Application”, in questo modo sarà realizzato un eseguibile senza interfaccia grafica e quindi senza che l’utente possa interagire.
Appena creato il programma, dobbiamo aggiungere il riferimento alla libreria “Log4Net”. 
Apriamo la finestra di “Gestione Pacchetti Nuget” tramite il menu di scelta rapida sul nome del progetto nella finestra di “esplora soluzioni” e nella finestra che viene aperta, digitiamo “Log4Net” ed installiamo la libreria di tipo “Apache Log4net” il tutto come mostrato in figura 1.


Figura 1 – Installazione del componente Apache Log4net
A questo punto possiamo scrivere il codice per utilizzare il log.
Nel file di configurazione, in particolare al fine di tipo “app.config”, tra il tag “<Configuration”> ed il tag “<Startup>” inseriamo il seguente codice.



<configSections>

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

  </configSections>

  <log4net>

    <appender name="Console" type="log4net.Appender.ConsoleAppender">

      <layout type="log4net.Layout.PatternLayout">

        <!-- Pattern to output the caller's file name and line number -->

        <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/>

      </layout>

    </appender>

    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">

      <file value="LOG\LogMessaggi.log"/>

      <appendToFile value="true"/>

      <maximumFileSize value="1024KB"/>

      <maxSizeRollBackups value="5"/>

      <layout type="log4net.Layout.PatternLayout">

        <conversionPattern value="%date %level %logger - %message%newline"/>

      </layout>

    </appender>

    <root>

      <level value="DEBUG"/>

      <appender-ref ref="LogFileAppender"/>

    </root>

  </log4net>


Ora non ci resta che passare al file denominato "module" per VB.Net o il file denominato "Programm" per C#
Inseriamo lo spazio dei nomi per utilizzare le classi della libreria Log4Net, qui di seguito si riporta il frammento di codice.


VB.Net

Imports log4net

C#

using log4net;


Ora scriviamo il codice, molto semplice per generare e scrivere in un file di testo, informazioni sul codice.
Qui di seguito si riporta il codice per entrambi linguaggi.


VB.Net

Module Module1

 

    Sub Main()

        Dim log As ILog = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

        Try

            log4net.Config.XmlConfigurator.Configure()

            'Codice

            '-------

            log.Info("Testo da scrivere nel file")

        Catch ex As Exception

            log.Fatal("Errore: " & ex.Message)

        End Try

    End Sub

 

End Module

C#

  class Program

    {

        private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

 

 

        static void Main(string[] args)

        {

 

            try

            {

                log4net.Config.XmlConfigurator.Configure();

                //Codice

                //-------

                log.Info("Testo da scrivere nel file");

 

 

            }

            catch (Exception ex)

            {

                log.Fatal("Errore: " + ex.Message);

            }

 

 

        }

    }


Ora non ci resta che generare il file, preparare la cartella e copiarla sul nostro server.
Dopo aver copiato la nostra cartella con i file la rinominiamo “ScriviBatch” come riportato qui di seguito.




Figura 2 – La cartella con i file.

Ora che abbiamo copiato i file, non ci resta che creare la schedulazione ogni 5 minuti.
Apriamo utilità di pianificazione oppure per sistemi in lingua inglese “Task Scheduler”
Nel menu di destra, o dove sono presenti vari task, facciamo click con il tasto destra , nel menu che viene aperto, facciamo click sulla voce di menu “Create Task” come mostrato in figura 3. La voce “Create Basic Task” permette di avere un wizard, ossia che guida l’utente alla creazione del task.


Figura 3 – il menu per la creazione del task.

Quando si apre la finestra, dobbiamo impostare alcuni parametri per realizzare il nostro task. In particolare, il nome del task, eventualmente una descrizione, l’utenza con cui dovrà girare il task, e se eseguirlo con alti privilegi, che consigliamo di mettere la spunta, il tutto come mostrato in figura 4.


Figura 4 – La prima finestra per il taks.

Dopo aver impostato i vari campi, facciamo click sulla paginetta con la dicitura “Triggers”, nella finestra che viene aperta (figura 5) facciamo click sul pulsante “New……”


Figura 5 – La finestra per la creazione del task.

A questo punto impostiamo i campi, in particolar modo la sezione “Settings” selezionando l’opzione “Daily”, lasciando il valore nel campo “Recur Every” a 1.
Mettiamo la spunta nel campo “Repeat Task every” ed impostiamo a “5 minutes”.
A questo punto confermiamo il tutto tramite il pulsante “OK”.



Figura 6 – Impostazioni di esecuzione

Facciamo click sulla linguetta con la voce “Actions” ed anche in questo caso, facciamo click sula pulsante “New…” nella finestra che viene aperta (figura 7) tramite il pulsante con la dicitura “Browse….” Andiamo a selezionare il file eseguibile che abbiamo copiato nel server.


Figura 7 – Il file eseguibile

A questo punto lasciamo tutto com’è e confermiamo con il pulsante “Ok”.
Ora nella lista dei file da eseguire periodicamente, ci sarà anche quello che abbiamo appena creato, dove nella colonna “Next Run Time” possiamo vedere quando sarà la successiva esecuzione.

Conclusioni

L’articolo ha voluto fornire le basi per la realizzazione di un batch, ossia la possibilità di realizzare quei programmi di tipo console, che pianificati ad un certo orario e giorno, eseguono operazioni automaticamente senza ricorrere all’utilizzo dell’utente.
I batch, come definiscono in molti, sono tecniche molto usante in quei contesti lavorativi che richiedono continuamente elaborazione di dati, o invio di certe informazioni.