giovedì 15 aprile 2021

C# Utilizzo della nuova classe TaskDialogPage .Net 5.0 - Parte 2

 Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_c-utilizzo-della-nuova-classe-taskdialogpage-net-50-parte-2_1735.aspx 


Dopo aver visto nella prima parte alcuni aspetti di questa classe e le varie proprietà e metodi utilizzati,  qui https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_c-utilizzo-della-nuova-classe-o-taskdialog-net-50-parte-1_1732.aspx l’articolo della prima parte. Vedremo in questa seconda ed ultima parte altri utilizzi che possono rendere la creazione di applicazioni più professionali e soprattutto semplificare lo sviluppo.

Riprendiamo il progetto precedente nel quale sono presenti una serie di pulsanti sulla form, con il quale per ogni pulsante faremo vedere i vari utilizzi.



Figura 1 – La form con la serie di pulsanti.


Stesura del codice


Riprendiamo dalla seconda riga di pulsanti, quella in basso, in particolare facciamo doppio click sul pulsante che ha la dicitura “Progress Bar”, in modo che passiamo in visualizzazione codice.

In questo esempio vedremo come applicare alla classe TaskDialogPage, una barra di progressione, tramite la classe “TaskDialogProgressBar” con il quale applicare al messaggio l’animazione.



Qui di seguito il codice delle suddette operazioni


C#

  private void BtnProgressBar_Click(object sender, EventArgs e)

        {

            const string testo = "Chiusura tra {0} secondi...";

            int SecondiRimanenti = 50;

 

            var RiavviaButton = new TaskDialogButton("&Riavvia");

            var cancelButton = TaskDialogButton.Cancel;

 

            var page = new TaskDialogPage()

            {

                Heading = "Intestazione",

                Text = string.Format(testo, (SecondiRimanenti + 9) / 10),

                //Visualizzo l'icona della form, ma posso mettere altre icone.

                Icon = new TaskDialogIcon(this.Icon),

                ProgressBar = new TaskDialogProgressBar()

                {

                    State = TaskDialogProgressBarState.Paused

                },

                Buttons =

                {

                    RiavviaButton,

                    cancelButton

                }

            };

 

 

            using (var timer = new Timer()

            {

                Enabled = true,

                Interval = 100

            })

            {

                timer.Tick += (s, e) =>

                {

                    SecondiRimanenti--;

                    if (SecondiRimanenti > 0)

                    {

                        //Aggiorno la barra

                        page.Text = string.Format(testo, (SecondiRimanenti + 9) / 10);

                        page.ProgressBar.Value = 100 - SecondiRimanenti * 2;

                    }

                    else

                    {

                        //Invoco il click del pulsante riavvia al termine del caricamento della progress bar

                        timer.Enabled = false;

                        RiavviaButton.PerformClick();

                    }

                };

 

                TaskDialogButton result = TaskDialog.ShowDialog(this, page);

                if (result == RiavviaButton)

                    MessageBox.Show("Riavviato.");

                else

                    MessageBox.Show("Annullato.");

            }

        }


Come si è visto dal codice precedente, si fa uso anche della classe timer per aggiornare ogni tot secondi l’avanzamento della barra.

Il risultato sarà simile come quello mostrato in figura 2.


Figura 2 – il risultato del messaggio


Ritorniamo in visualizzazione grafica, e facciamo doppio click sul pulsante che riporta la dicitura “Multipla Pagina” in questo modo passiamo in visualizzazione codice nell’evento click del pulsante.

In questo pulsante verranno utilizzate varie classi per permettere una navigazione su più pagine. In particolare, si interagisce con l’utente in maniera che prosegue per tre passaggi (step) dove nella prima pagina, può continuare solo nel momento in cui farà click sul controllo di tipo “Checkbox, dopo il click sul controllo “checkBox” verrà abilitato un pulsante che permetterà di proseguire (figura 3).


Figura 3 – Il primo messaggio con il quale la check abilitato il pulsante “Si per continuare”.


Nella finestra successiva una pagina con barra di progressione con il quale ci sarà un pulsante disabilitato (figura 4).


Figura 4 - La seconda pagina con la barra di progressione


Al completamento della “Progress Bar”, verrà aperta una finestra con il pulsante di navigazione (figura 5).


Figura 5 – La terza ed ultima pagina con il pulsante di tipo collegamento



Qui di seguito il codice delle suddette operazioni.


C#

 

private void BtnMultiPage_Click(object sender, EventArgs e)

        {

            // Imposto il pulsante si come disabilitato

            var ButtonYes = TaskDialogButton.Yes;

            ButtonYes.Enabled = false;

            ButtonYes.AllowCloseDialog = false;

 

            var initialPage = new TaskDialogPage()

            {

                Caption = "Titolo applicazione",

                Heading = "Intestazione - Come vuoi procedere?",

                Text = "Sei sicuro di procedere?\n\n\n Testo a capo!",

                Icon = TaskDialogIcon.ShieldWarningYellowBar, //Stile della pagina,

                AllowCancel = true,

                //Possibilità di minimazziare

                AllowMinimize = true,

 

                Verification = new TaskDialogVerificationCheckBox()

                {

                    Text = "Scelta di default"

                },

 

                Buttons =

                {

                    TaskDialogButton.No,

                    ButtonYes

                },

                DefaultButton = TaskDialogButton.No

            };

 

            // Creo un pulsante disabilitato nella pagina, perchè altrimenti mette uno di default che chiude la finestra.

            var PulsanteDisabilitato = TaskDialogButton.Close;

            PulsanteDisabilitato.Enabled = false;

 

            var ProgressPage = new TaskDialogPage()

            {

                Caption = "Titolo applicazione",

                Heading = "Operazione incorso........",

                Text = "Testo - operazione in corso.",

                Icon = TaskDialogIcon.Information,

                AllowMinimize = true,

 

                ProgressBar = new TaskDialogProgressBar()

                {

                    State = TaskDialogProgressBarState.Marquee

                },

 

                Expander = new TaskDialogExpander()

                {

                    Text = "Avvio......",

                    Position = TaskDialogExpanderPosition.AfterFootnote

                },

 

                Buttons =

                {

                    PulsanteDisabilitato

                }

            };

 

            // Viene aggiunto un pulsante per intercettare la chiusura della pagina.

            var PulsanteDisabilitatoPerEvitareChiusura = TaskDialogButton.Cancel;

            PulsanteDisabilitatoPerEvitareChiusura.Visible = false;

            PulsanteDisabilitatoPerEvitareChiusura.AllowCloseDialog = false;

            ProgressPage.Buttons.Add(PulsanteDisabilitatoPerEvitareChiusura);

 

            var UltimaPage = new TaskDialogPage()

            {

                Caption = "Titolo Pagina Ultima Pagina",

                Heading = "Testo",

                Text = "Tutte le azioni sono terminate.",

                Icon = TaskDialogIcon.ShieldSuccessGreenBar,

                AllowMinimize = true,

                Buttons =

                {

                    TaskDialogButton.Close

                }

            };

 

            TaskDialogButton VisualizzaButton = new TaskDialogCommandLinkButton("&Visualizza");

            UltimaPage.Buttons.Add(VisualizzaButton);

 

            //Abilito il pulsante di "Si" solo dopo aver selezionato il checkbox

            TaskDialogVerificationCheckBox checkBox = initialPage.Verification;

            checkBox.CheckedChanged += (sender, e) =>

            {

                ButtonYes.Enabled = checkBox.Checked;

            };

 

            //Navigo nella seconda pagina, al click del pulsante SI

            ButtonYes.Click += (sender, e) =>

            {

                //Pagina relativa alla barra di avanzamento

                initialPage.Navigate(ProgressPage);

 

            };

 

            // Simulo le operazioni che andranno fatte nella progress bar

            ProgressPage.Created += async (s, e) =>

            {

                // Eseguo il caricamento della progressBar.

                var progressBar = ProgressPage.ProgressBar;

 

                await foreach (int ValoreProgressivo in SimulazioneCaricamentoProgressivoBarraAsync())

                {

                    // Al primo avvio cambio lo stato

                    if (progressBar.State == TaskDialogProgressBarState.Marquee)

                        progressBar.State = TaskDialogProgressBarState.Normal;

 

                    progressBar.Value = ValoreProgressivo;

                    ProgressPage.Expander.Text = $"Avanzamento: {ValoreProgressivo} %";

                }

 

                //Al termine del caricamento della barra passo alla pagina successiva, al completamento 100%

                ProgressPage.Navigate(UltimaPage);

            };

 

            //Visualizzo l'ultima pagina e verifico il pulsante selezionato

            TaskDialogButton result = TaskDialog.ShowDialog(initialPage);

            if (result == VisualizzaButton)

            {

                MessageBox.Show("Pulsante Visualizza");

            }

 

 

            static async IAsyncEnumerable<int> SimulazioneCaricamentoProgressivoBarraAsync()

            {

                //Attesa

                await Task.Delay(2800);

 

                for (int Conta = 0; Conta <= 100; Conta += 4)

                {

                   

                    yield return Conta;

 

                  

                    await Task.Delay(200);

                }

            }

        }


Passiamo in visualizzazione grafica per continuare a scrivere altri aspetti di utilizzo della classe per la gestione di messaggi a video in ambito avanzato.

Facciamo click sul pulsante con la dicitura “Esecuzione Amministratore” in maniera che passiamo in visualizzazione codice, ed in particolar modo nell’evento click del pulsante.

In questo pulsante viene visualizzato un messaggio a video con il quale tramite il pulsante di tipo “Navigazione” viene eseguito il prompt dei comandi di Windows in modalità “amministratore”.

Con la classe ProcessStartInfo viene eseguito il programma di prompt in modalità amministratore, il tutto invocando dal click del pulsante di tipo “TaskDialogCommandLinkButton”.


Qui di seguito il codice delle suddette operazioni.


C#

private void BtnAmministratore_Click(object sender, EventArgs e)

        {

            var pageAmministratore = new TaskDialogPage()

            {

                Heading = "Titolo - Esecuzione modalità amministratore",

                Text = "Eseguire il programma in modalità amministratore",

                Icon = TaskDialogIcon.ShieldSuccessGreenBar,

                Buttons =

                {

                    TaskDialogButton.Close

                }

            };

 

            var EseguiButton = new TaskDialogCommandLinkButton("&Esegui");

            pageAmministratore.Buttons.Add(EseguiButton);

 

            EseguiButton.ShowShieldIcon = true;

            EseguiButton.Click += (s, e) =>

            {

                EseguiButton.AllowCloseDialog = true;

                EseguiButton.Enabled = false;

 

                //Esegue in modalità amministratore il prompt dei comandi

                var processPrompt = new ProcessStartInfo("cmd.exe", "/k echo testo, testo inserito nel prompt.")

                {

                    UseShellExecute = true,

                    Verb = "runas"

                };

 

                try

                {

                    Process.Start(processPrompt)?.Dispose();

                }

                catch (Win32Exception ex) when (ex.NativeErrorCode == 1223)

                {

                    //Gestione dell'errore

                    EseguiButton.AllowCloseDialog = false;

                    EseguiButton.Enabled = true;

                    return;

                }

            };

 

            TaskDialog.ShowDialog(this, pageAmministratore);

        }


Ora non resta che eseguire il pulsante ed il risultato sarà come la figura 6.



Figura 6 – La pagina che apre in modalità amministratore il prompt



Siamo giunti quasi a conclusione dell’articolo, non ci resta che scrivere il codice per la gestione degli eventi che la classe TaskDialogPage offre con i suoi vari controlli.

Ritorniamo in modalità grafica, e facciamo click sull’ultimo pulsante, quello con la dicitura “Eventi” in modo che passiamo in visualizzazione codice nell’evento click del pulsante.

Questo ultimo frammento di codice fornisce vari esempi di codice dell’utilizzo degli eventi che si possono verificare nell’utilizzo della classe “TaskDialogPage” con i vari controlli che si possono inserire ed in quelli della classe (creazione, chiusura, etc).


Qui di seguito il frammento di codice delle suddette operazioni


C#

private void BtnEventi_Click(object sender, EventArgs e)

        {

            var pagePrincipale = new TaskDialogPage()

            {

                Caption = Text,

                Heading = "Eventi",

                Text = "Dimostrazioni eventi",

            };

 

            pagePrincipale.Created += (s, e) => MessageBox.Show("Creazione Pagina principale");

            pagePrincipale.Destroyed += (s, e) => MessageBox.Show("Chiusura dopo ok della pagina principale");

            pagePrincipale.HelpRequest += (s, e) => MessageBox.Show("Click pulsante Help della Pagina principale ");

 

            pagePrincipale.Expander = new TaskDialogExpander("Parte che si espande")

            {

                Position = TaskDialogExpanderPosition.AfterFootnote

            };

 

            pagePrincipale.Expander.ExpandedChanged += (s, e) => MessageBox.Show("Evento ExpandedChanged: " + pagePrincipale.Expander.Expanded);

 

            var buttonOK = TaskDialogButton.OK;

            var buttonHelp = TaskDialogButton.Help;

            var buttonChiudi = new TaskDialogCommandLinkButton("&Chiusura", allowCloseDialog: false);

            var buttonShowInnerDialog = new TaskDialogCommandLinkButton("&Apri Task Dialog", "(con successiva chiusura)");

            var buttonNavigaPaginaSecondaria = new TaskDialogCommandLinkButton("&Naviga Pagina Secondaria", allowCloseDialog: false);

 

            pagePrincipale.Buttons.Add(buttonOK);

            pagePrincipale.Buttons.Add(buttonHelp);

            pagePrincipale.Buttons.Add(buttonChiudi);

            pagePrincipale.Buttons.Add(buttonShowInnerDialog);

            pagePrincipale.Buttons.Add(buttonNavigaPaginaSecondaria);

 

            buttonOK.Click += (s, e) => MessageBox.Show($"Pulsante '{s}' Click");

            buttonHelp.Click += (s, e) => MessageBox.Show($"Pulsante '{s}' Click");

 

            buttonChiudi.Click += (s, e) =>

            {

                MessageBox.Show($"Pulsante '{s}' Click");

            };

 

            buttonShowInnerDialog.Click += (s, e) =>

            {

                MessageBox.Show($"Pulsante '{s}' Click");

                TaskDialog.ShowDialog(new TaskDialogPage()

                {

                    Text = "Testo Task Dialog"

                });

                MessageBox.Show($"Pulsante dopo ShowDialog '{s}' Click");

            };

 

            buttonNavigaPaginaSecondaria.Click += (s, e) =>

            {

                MessageBox.Show($"Evento click pulsante '{s}' ");

 

                //Apro una nuova pagina

                var pageSecondaria = new TaskDialogPage()

                {

                    Heading = "Pagina secondaria.",

                    Buttons =

                    {

                        TaskDialogButton.Close

                    }

                };

                pageSecondaria.Created += (s, e) => MessageBox.Show("Evento pagina secondaria creazione ");

                pageSecondaria.Destroyed += (s, e) => MessageBox.Show("Evento pagina secondaria  di chiusura");

 

                pagePrincipale.Navigate(pageSecondaria);

            };

 

            pagePrincipale.Verification = new TaskDialogVerificationCheckBox("&Controllo checkbox messo in basso");

            pagePrincipale.Verification.CheckedChanged += (s, e) => MessageBox.Show("Evento CheckedChanged del check di verifica: " + pagePrincipale.Verification.Checked);

 

            var radioButton1 = pagePrincipale.RadioButtons.Add("Radi&oButton 1");

            var radioButton2 = pagePrincipale.RadioButtons.Add("RadioB&utton 2");

 

            radioButton1.CheckedChanged += (s, e) => MessageBox.Show("Evento CheckedChanged del RadioButton1: " + radioButton1.Checked);

            radioButton2.CheckedChanged += (s, e) => MessageBox.Show("Evento CheckedChanged dek RadioButton2: " + radioButton2.Checked);

 

            var dialogResult = TaskDialog.ShowDialog(pagePrincipale);

            MessageBox.Show("Visualizza risultato Task Dialog della pagina principale: " + dialogResult);

        }


Il risultato sarà il tutto come illustrato in figura 7



Figura 7 – Esempio di eventi per i vari controlli


Conclusioni

L’articolo ha fornito una panoramica completo dell’utilizzo della nuova classe per la visualizzazione dei messaggi a video, standard di quelli di Windows, fornendo al lettore i vari utilizzi e le potenzialità offerte di questa classe.

Con il Framework 5.0 le potenzialità offerte sono tante, e tra queste anche nuove classi, come in questo caso per la classe “TaskDialogPage”.


L’utilizzo di questa classe, come anche l’articolo è per applicazioni di tipo “Windows Application” e con Visual Studio 2019 e Framework 5.0.

mercoledì 14 aprile 2021

Componente gratuito per fare i grafici billboard.js

 


Nello sviluppo di applicazioni web, può tornare utile la creazione dei grafici per la presentazione dei dati, il framework billboard.js può tornare utile in tale circostanza.

Per maggiori informazioni ed altro visitate il seguente sito https://naver.github.io/billboard.js/

martedì 13 aprile 2021

Il blog tecnico di Gianmarco Castagna

 Oggi segnalo un blog tecnico di Gianmarco Castagna, con il quale sono presenti interessanti post sul linguaggio di programmazione C#.

I post sono scritti in lingua italiana, qui https://gianmarcocastagna.blogspot.com/ il blog.

lunedì 12 aprile 2021

Anteprima Framework .Net 6

Come annunciato dal seguente sito https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-3/ rilasciati in questi giorni la versione anteprima del .Net 6 ed Asp.Net Core .Net 6 qui le novità  https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-6-preview-3/  di Asp.Net 6

Download gioco The Cycle

 



Disponibile gratuitamente per sistema operativo Windows, il gioco The Cycle, un videogames di avvenuta.

Il gioco non è in lingua inglese, ma facilmente giocabile.

Per maggiori informazioni e download visitate il seguente sito https://www.epicgames.com/store/it/p/thecycle

domenica 11 aprile 2021

Beyond Public Speaking for Geeks


 



Disponibile gratuitamente ed in lingua inglese, un ebook di circa 80 pagine con il quale spiega le tecniche per parlare in pubblico o tramite webcast per un pubblico tecnico.

Per scaricare l'ebook in lingua inglese e formato pdf o dispositivi mobile, visitate il seguente sito Free Ebook - Beyond Public Speaking for Geeks Succinctly (syncfusion.com) 

sabato 10 aprile 2021

Esportare i contatti in Android su altro smartphone Android

 In questo tutorial vedremo come esportare i contatti di rubrica salvati sulla memoria del cellulare Android e copiarli in un altro cellulare.

Andiamo nel nostro SmartPhone nella sezione dove sono presenti tutte le app, di norma fare click sul pulsante in basso centrale, ci troveremo tutte le app che abbiamo nello smartphone


Figura 1 - Tutte le app


In alto c'è l'icona della lente di ingrandimento, digitiamo il testo "Contatt" e tra le app viene visualizzata quella denominata "Persone". Questa app, di default per ogni smartphone, permette di gestire i contatti, ossia numeri di telefono delle presone.


Figura 2 - L' app per la gestione dei contatti


A questo punto facciamo click sull'applicazione "Persone" in modo che si apre l'applicazione con tutti i numero di telefono, il tutto come mostrato in figura 3.


Figura 3 - la lista dei contatti nell app "Persone"



Sopra ad ogni contatto lato destro, si trovano tre quadrati in verticale, facciamo click su quell'icona, il quale verrà mostrato un menu di voci, come riportato in figura 4.


Figura 3  - Il menu



Facciamo click sulla voce "Gestisci Cont." in modo che apre una nuova finestra che permette l'importazione o esportazione dei contatti.


Figura 4 - La finestra con funzioni sui contatti


Facciamo click sulla voce "Importa/Esperta" della figura 4, in modo che apre una finestra per chiedere quale funzionalità avviare, il tutto come mostrato in figura 5.

Figura 5 - le scelte proposteò




Facciamo click sulla voce "Esporta in archivio" in modo che alla successiva finestra ci chiede in quale maniera esportare i contatti (figura 6) .


Figura 6 - la finestra con il quale scegliere la modalità di esportazione


Selezioniamo la voce "Google", in questo modo impostando sull'altro dispositivo l'account Google, possiamo scaricare e sincronizzare i contatti.

A questo punto verrà eseguita la fase di esportazione.

venerdì 9 aprile 2021

Download gioco gratuito 3 out of 10: Season Two

 



Disponibile gratuitamente e senza limitazioni di funzionali e di tempo, il gioco di strategia 3 out of 10: Season Two fino al 15 aprile 2021.

Il gioco è in lingua inglese e per sistemi operativi Windows.

Per maggiori informazioni e download visitate il seguente sito 3 out of 10: Season Two (epicgames.com)

giovedì 8 aprile 2021

Sito per scaricare immagini gratuitamente

 Il sito Png EGG, è un portale con il quale cercare file immagini di tipo png e scaricarli gratuitamente senza inserire email e senza registrazione.

Un sito con immagini che non hanno sfondo, molto interessante.

Dopo aver effettuato la ricerca per un determinato testo, fate click sull'immagine. In basso all'immagine selezionata troverete la scritta "Download png for free " con un numero di quanto pesa.

Il sito è in lingua inglese, per maggiori informazioni ed altro visitate il seguente sito https://www.pngegg.com/ 

mercoledì 7 aprile 2021

C# .Net Games componente gratuito per creazione videogiochi con flatredball 2d

Per coloro che vogliono sviluppare video giochi con .Net ed in particolar modo con C#, possono trovare utile il componente gratuito Flatredball 2d FlatRedBall – 2D Game Engine che semplifica la creazione di tali video giochi.

Il componente è gratuito ed è per il linguaggio di programmazione C#. Per maggiori informazioni e download visitate il seguente sito FlatRedBall – 2D Game Engine 



martedì 6 aprile 2021

Editor e componente gratuito per creazione video gioco in .Net

 



Se state cercando un editor per la creazione di video giochi in .Net e  componente in tale ambito, Cryengine offre tale soluzione gratuitamente.

Il sito in lingua inglese, fornisce anche una valida documentazione e forum con il quale fare richieste tecniche.

Per maggiori informazioni ed altro visitate il seguente sito https://www.cryengine.com/ 


lunedì 5 aprile 2021

Download gioco Tales of the Neon Sea

 



Disponibile gratuitamente e senza limitazioni il gioco di rompicapo Tales Of The Neon Sea, per sistemi operativi Windows.

Il gioco è in lingua inglese, per maggiori informazioni e download visitate il seguente sito https://www.epicgames.com/store/it/p/tales-of-the-neon-sea 

domenica 4 aprile 2021

.Net 5.0 C# Utilizzo della nuova classe o TaskDialog - Parte 1

 Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_c-utilizzo-della-nuova-classe-o-taskdialog-net-50-parte-1_1732.aspx 


In questa prima parte dell’articolo riguardante l’utilizzo della nuova classe TaskDialogPage, presente in .Net 5.0, vedremo come utilizzare in vari contesti e soprattutto le proprietà ed eventi  per personalizzare il più possibile i messaggi a video per l'utente.


La classe TaskDialogPage è simile alla classe Messagebox solo che ha delle proprietà e metodi che la rendono più avanzata e simile ai messaggi di sistema di Windows.

Questa classe si utilizza per progetto di tipo “Windows Application” e con la versione del Framework 5.0


Creazione del progetto

Si crea un nuovo progetto di tipo “Windows Forms App (.Net) tra i vari progetti che troviamo, il tutto come mostrato in figura 1.




Figura 1 – La selezione del progetto.


Dopo aver impostato il nome del progetto ed il relativo percorso, facciamo click con il tasto destro sul nome del progetto presente in “Esplora Soluzioni” e nel menu che viene aperto selezionare la voce “Proprietà”, con il quale si aprirà la finestra del progetto dove impostare la versione del “Framework 5.0” il tutto come mostrato in figura 2.



Figura 2 – La scelta della versione del Framework


Dopo aver impostato il progetto con il Framework versione .Net 5 non resta che inserire nella schermata o meglio nella form, una serie di pulsanti che permetteranno di visualizzare le varie funzionalità della classe per visualizzare a video dei messaggi.

Inseriamo 8 pulsanti, con la dicitura presente in figura 3, con il quale andremo a scrivere il codice per gli eventi click. Possiamo utilizzare anche un pulsante solo, e di volta in volta scrivere il codice per eseguire le varie operazioni, il tutto a scelta del lettore.

Figura 3 – Il posizionamento dei pulsanti


Stesura del codice

Terminata la parte di configurazione e gestione del progetto non resta ora che scrivere il codice. Per rendere semplice la lettura e soprattutto il codice da scrivere, faremo riferimento alla figura precedente (3) in modo da capire dove scrivere il codice.

Iniziamo con il fare doppio click sul pulsante con il testo “Messaggio” un questo modo passiamo all’evento click del pulsante.

In questo evento, vedremo come utilizzare la classe TAskDialogPage in maniera standard.


Nell’evento click scriviamo il codice che permette di impostare il testo del titolo, della scrizione, il pulsante ed il tipo di immagine.


C#

private void BtnSemplice_Click(object sender, EventArgs e)

        {

 

 

           

            TaskDialogButton result = TaskDialog.ShowDialog(this, new TaskDialogPage()

            {

                Text = "Testo da visualizzare nel messaggio.",

                Heading = "Testo del messaggio - Sei sicuro che vuoi continuare?",

                Caption = "Testo intestazione - TaskDialogButton semplice",

                Buttons =

                {

                    TaskDialogButton.Yes,

                    TaskDialogButton.No

                },

                Icon = TaskDialogIcon.Warning,

                DefaultButton = TaskDialogButton.No

            });

 

            if (result == TaskDialogButton.Yes)

            {

                MessageBox.Show(result.ToString());

               

            }

            MessageBox.Show(result.Text);

            return;

 

 

        }


Il codice precedente permette di creare una tipica “MessageBox” con l’icona di attenzione, due pulsanti e verificare se è stato selezionato il pulsante di si.


Il risultato finale sarà come mostrato in figura 4.


Figura 4 – Messaggio che verrà visualizzato


Torniamo in visualizzazione grafica e facciamo doppio click sul pulsante con la scritta “Messaggio con Check”, in questo modo, verrà visualizzata il messaggio precedente, con l’aggiunta di un controllo checkbox.

C#

private void BtnMessaggioCheck_Click(object sender, EventArgs e)

        {

            var Taskpage = new TaskDialogPage()

            {

                Heading = "Vuoi procedere?",

                Text = "Il testo che si vuole visualizzare.",

                Caption = "Titolo del messaggio - Task Dialog page con Checkbox",

                Icon = TaskDialogIcon.Warning,

                AllowCancel = true, //proprietà per la chiusura tramite x della finestra true è visibile la X di chiusura finestra altrimenti nascosto

 

                Verification = new TaskDialogVerificationCheckBox()

                {

                    Text = "Non ripetere più la scelta"

                },

 

                Buttons =

                {

                    TaskDialogButton.Yes,

                    TaskDialogButton.No

                },

 

                DefaultButton = TaskDialogButton.No

            };

 

            var SceltaDialog = TaskDialog.ShowDialog(this, Taskpage);

 

            if (SceltaDialog == TaskDialogButton.Yes)

            {

                if (Taskpage.Verification.Checked)

                    MessageBox.Show("Selezionato il check");

 

 

            }

        }


Tramite la classe “TaskDialogVerificationCheckBox” viene applicata nella parte inferiore del messaggio, un controllo di tipo “checkbox” come si vede ogni tanto nei messaggi di Windows, la quale verifica avviene tramite la proprietà “Checked” di Verification.

Si fa notare, come la proprietà “AllowCancel” permette di visualizzare il pulsante “X” di chiusura della finestra.

Il risultato sarà come illustrato in figura 5.



Figura 5 – Il messaggio con il Check


Ritorniamo in visualizzazione grafica, e facciamo doppio click sul pulsante con la denominazione “Pulsanti Personalizzati”, in questo caso, la classe “TaskDialogPage” viene utilizzata con le classi TaskDialogoButton, per personalizzare i pulsante. Il simbolo della e commerciale “&” permette di utilizzare la combinazione di tasi per eseguire il comando, per esempio per il pulsante basta "Salva" tenere il pulsante “Alt” e poi “S” della tastiera per eseguirlo.

Il tutto come avviene per i menu.

Possiamo aggiungere n pulsanti che vogliamo e poi verificare che tipo di pulsante è stato utilizzato, come nella condizione if presente a fine codice.

C#

private void BtnPulsantiPersonalizzati_Click(object sender, EventArgs e)

        {

            //Creazione dei pulsanti

            TaskDialogButton btnCancel = TaskDialogButton.Cancel;

            TaskDialogButton btnSalva = new TaskDialogButton("&Salva");

            TaskDialogButton btnNonSalvare = new TaskDialogButton("No&n Salvare");

            TaskDialogButton BtnPulsanteCustom = new TaskDialogButton("Pulsante Personalizzato");

            var page = new TaskDialogPage()

            {

                Caption = "Titolo del messaggio",

                Heading = "Testo del messaggio che vuoi fare?",

                Buttons =

                {

                    btnCancel,

                    btnSalva,

                    btnNonSalvare,

                    BtnPulsanteCustom

                }

            };

 

            //Visualizza la scelta selezionata

            TaskDialogButton result = TaskDialog.ShowDialog(this, page);

 

 

 

 

            if (result == btnSalva)

                MessageBox.Show("Salva");

            else if (result == btnNonSalvare)

                MessageBox.Show("Non salvare");

            else if (result == BtnPulsanteCustom)

                MessageBox.Show("Personalizzato");

            else

                MessageBox.Show("Annulato");

        }


Il risultato di tale operazione sarà come riportato in figura 6, nel quale c’è anche il pulsante personalizzato. Da notare come solo il pulsante “Salva” ed il pulsante “Non Salvare” hanno il trattino sotto la lettera con il quale è preceduto il simbolo della e commerciale.


Figura 6 – La finestra con i pulsanti personalizzati


Dopo aver fatto le prove, passiamo in visualizzazione grafica per scrivere il codice dell’ultimo pulsante.

Facciamo doppio click sul pulsante con la dicitura “Pulsanti Link” in modo da passare in visualizzazione codice.

La classe TaskDialogPage, verrà integrata con la classe “TaskDialogCommandLinkButton” e la classe “TaskDialogFootnote” per inserire una piccola annotazione in basso al messaggio che verrà visualizzato a video.

C#

  private void BtnPulsantiLink_Click(object sender, EventArgs e)

        {

            var page = new TaskDialogPage()

            {

                Caption = "Intestazione",

                Heading = "Quale scelta vuoi selezionare? ?",

                AllowCancel = true,

 

                Footnote = new TaskDialogFootnote()

                {

                    Text = "Note: Questo testo si trova in fondo come notazione.",

                },

 

                Buttons =

                {

                    new TaskDialogCommandLinkButton("&Prima Scelta", "Descrizione prima scelta")

                    {

                        Tag = 10

                    },

                    new TaskDialogCommandLinkButton("&Seconda Scelta", "Descrizione seconda scelta")

                    {

                        Tag = 15

                    },

                    new TaskDialogCommandLinkButton("&Terza Scelta", "Descrizione terza scelta")

                    {

                        Tag = 20

                    }

                }

            };

 

            TaskDialogButton resultScelta = TaskDialog.ShowDialog(this, page);

 

            if (resultScelta.Tag is null)

            {

                MessageBox.Show("Annullato");

            }

            else if (Convert.ToInt32(resultScelta.Tag) == 10)

                MessageBox.Show("Prima Scelta");

            else if (Convert.ToInt32(resultScelta.Tag) == 15)

                MessageBox.Show("Seconda Scelta");

            else if (Convert.ToInt32(resultScelta.Tag) == 20)

                MessageBox.Show("Terza Scelta");

        }


La finestra che verrà visualizzata, avrà i pulsanti con lo stile di “collegamento” e non veri pulsanti come siamo abituati a vedere, il tutto come mostrato in figura 7.

Da notare che la scelta del pulsante al quale è stato fatto click, lo rileviamo dal valore della proprietà “Tag” al quale possiamo utilizzarlo per passarlo a qualche funzione.


Finestra 7 – La finestra di TaskDialogPage con lo stile a pulsanti di collegamento


Conclusioni

Siamo giunti alla conclusione di questa prima parte dell’articolo, con il quale vengono forniti alcune indicazioni ed esempi sull’utilizzo della classe “TaskDialogPage”, con l’utilizzo anche di altri classi per visualizzare a video messaggi personalizzati.

Questa classe la troviamo con la nuova versione del Framework 5.0 ed è per ambiente “Windows Application” e non web.

Le numerose classi e proprietà messa a disposizione di questa classe, forniscono al programmare autonomia e flessibilità per creare messi a video sempre più accattivanti.

sabato 3 aprile 2021

Linq utilizzo del metodo Intersect per estrapolare gli elementi di un elemento

 Nel caso che abbiamo due string di tipo Array e vogliamo estrapolare gli elementi che sono presenti anche nell'altro array, tramite il metodo Intersect possiamo ottenere tali elementi.

Qui di seguito un frammento di codice di esempio.


 string[] TutteCitta = { "Berlino", "Parigi", "Roma", "Palermo", "Mantova", "Madrid" };

            string[] CittaItaliane = { "Roma", "Mantova", "Palermo" };


            var CittaItalieneTrovate = TutteCitta.Intersect(CittaItaliane);

            foreach (string citta in CittaItalieneTrovate)

                MessageBox.Show(citta);

venerdì 2 aprile 2021

.Net strumenti e componenti per la creazione di video giochi


 


Riprendo il post riguardante la programmazione dei video giochi per vari piattaforme.

Per chi si vuole avvicinare alla programmazione di videogiochi in commercio ci sono numerosi strumenti e componenti gratuiti.

Una serie di contenuti per iniziare a sviluppare o meglio creare video giochi con la tecnologia .Net

Qui https://devblogs.microsoft.com/dotnet/choose-a-net-game-engine/ un post con vari riferimenti sui vari componenti gratuiti, mentre qui https://devblogs.microsoft.com/dotnet/game-development-with-net/ altro post sullo sviluppo dei video giochi.

Qui https://dotnet.microsoft.com/apps/games?WT.mc_id=gamedev-blog-abhamed il nuovo portale per la creazione dei video giochi, mentre qui https://dotnet.microsoft.com/learn/games?WT.mc_id=gamedev-blog-abhamed l'area formativa qui https://dotnet.microsoft.com/learn/games/unity-tutorial/intro?WT.mc_id=gamedev-blog-abhamed l'area formativa Unity.

Che dire, buona programmazione.

giovedì 1 aprile 2021

centro soluzioni hp visualizza tutto bianco

 



Dal primo gennaio 2021, Flash non è più funzionante comportando il mancato funzionamento di alcuni programmi tra questi anche Centro Soluzioni HP.

Quando si apre il programma "Centro Soluzioni HP", viene visualizzato una finestra tutta bianca.

Il problema si verifica perchè dal primo gennaio 2021 non è più attivo il componente Flash, e quindi il programma non funziona.

Per risolvere questo problema occorre installare il nuovo programma presente nello Store Windows 10, denominato " HP Scan and Capture " che è gratuito come riportato qui https://www.microsoft.com/it-it/p/hp-scan-and-capture/9wzdncrfhwl0?activetab=pivot:overviewtab 

Il programma sostituisce in maniera ottimale il precedente programma.

Per informazioni ed installazione, andate nello "Store" di Windows e cercate il programma.