In questo articolo vedremo come realizzare in un progetto di tipo “Windows Presentation Foundation” (WPF) con la possibilità di dotare l’applicativo con una funzionalità che permette di nasconderlo all’avvio e visualizzare una icona nella traybar per visualizzarlo nuovamente oppure nasconderlo, proprio come si fa nelle “Windows Application” con il controllo NotifyIcon.
Procedimento
Si crea un nuovo progetto di tipo “WPF”, selezionando il linguaggio di proprio interesse.
A questo punto aggiungere nei riferimenti il puntato alle librerie “System.Drawing” e “System.Windows.Forms” per la gestione dei controlli, il tutto come mostrato in figura 1.
Figura 1 – L’aggiunta dei riferimenti.
Prima di passare alla stesura del codice, dobbiamo inserire nella cartella “Bin” dove si troverà il file eseguibile, l’icona (file .ico) che sarà visibile nella traybar, per intenderci accanto all’orologio.
Figura 2 - L’icona che utilizzeremo.
A questo punto non ci resta che scrivere il codice.
Stesura del codice
Passiamo in visualizzazione codice, la prima cosa da fare è quella di andare nel file “XAML” ed in particolare nel file “Application.xaml” per VB.Net e “App.xaml” per il linguaggio di programmazione C#.
A questo punto nella parte markup, togliere il seguente tag.
StartupUri="MainWindow.xaml"
Ora passiamo in visualizzazione codice, dove scrivere il codice relativo al linguaggio di programmazione VB.Net e C#, per i file “App.xaml.cs” e “Application.xaml.cs”.
A questo punto dobbiamo inserire lo spazio dei nomi per la gestione delle classi per la notifica (notifyIcon) e per la grafica (drawing).
Qui di seguito si riporta il frammento di codice delle suddette dichiarazioni.
VB.Net
Imports System.Windows
Imports System.ComponentModel
C#
using System.Windows;
using System.ComponentModel;
Dichiariamo a livello di classe un oggetto di tipo NotifyIcon, il quale avrà il compito di visualizzare l’icona nella traybar ed le varie funzionalità, ed una variabile di tipo bolean per decidere se visualizzare o no l’icona.
Qui di seguito si riporta il frammento di codice.
VB.Net
Private Notifica As System.Windows.Forms.NotifyIcon
Private Uscita As Boolean
C#
private System.Windows.Forms.NotifyIcon Notifica;
private bool Uscita;
Ora non ci resta che creare i metodi per gestire i vari eventi che si verificano.
Ed in particolare, le funzioni per visualizzare il form quando si clicca una determinata e dal momento in cui si esce dall’applicativo.
Qui di seguito si riporta il frammento di codice.
VB.Net
Private Sub Esci()
Uscita = True
MainWindow.Close()
Notifica.Dispose()
Notifica = Nothing
End Sub
Private Sub VisualizzaForm()
If MainWindow.IsVisible Then
If MainWindow.WindowState = WindowState.Minimized Then
MainWindow.WindowState = WindowState.Normal
End If
MainWindow.Activate()
Else
MainWindow.Show()
End If
End Sub
C#
private void Esci()
{
Uscita = true;
MainWindow.Close();
Notifica.Dispose();
Notifica = null;
}
private void VisualizzaForm()
{
if (MainWindow.IsVisible)
{
if (MainWindow.WindowState == WindowState.Minimized)
{
MainWindow.WindowState = WindowState.Normal;
}
MainWindow.Activate();
}
else
{
MainWindow.Show();
}
}
Dobbiamo creare altri due metodi o meglio una funzione per la creazione del menu contestuale, quando si fa click con il tasto destro del mouse sull’icona, e la gestione dell’evento “Closing” della form.
Qui di seguito si riporta le suddette operazioni per i linguaggi VB.Net e C#
VB.Net
Private Sub CreazioneMenu()
Notifica.ContextMenuStrip = New System.Windows.Forms.ContextMenuStrip()
AddHandler Notifica.ContextMenuStrip.Items.Add("Apri").Click, AddressOf VisualizzaForm
AddHandler Notifica.ContextMenuStrip.Items.Add("Esci").Click, AddressOf Esci
End Sub
Private Sub MainWindow_Closing(sender As Object, e As CancelEventArgs)
If Not Uscita Then
e.Cancel = True
MainWindow.Hide()
End If
End Sub
C#
private void CreazioneMenu()
{
Notifica.ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip();
Notifica.ContextMenuStrip.Items.Add("Apri").Click += (s, e) => VisualizzaForm();
Notifica.ContextMenuStrip.Items.Add("Esci").Click += (s, e) => Esci();
}
private void MainWindow_Closing(object sender, CancelEventArgs e)
{
if (!Uscita)
{
e.Cancel = true;
MainWindow.Hide();
}
}
Ora non ci resta che scrivere il codice nell’evento “Startup” che riguarda il momento in cui viene avviata il programma.
In questo evento, vengono creati i vari gestori di evento ed inizializzato l’oggetto per la notifica.
Qui di seguito il frammento di codice.
VB.Net
Protected Overrides Sub OnStartup(e As StartupEventArgs)
MyBase.OnStartup(e)
MainWindow = New MainWindow()
AddHandler MainWindow.Closing, AddressOf MainWindow_Closing
Notifica = New System.Windows.Forms.NotifyIcon()
AddHandler Notifica.DoubleClick, AddressOf VisualizzaForm
Notifica.Icon = New System.Drawing.Icon("accept.ico")
Notifica.Visible = True
CreazioneMenu()
End Sub
C#
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MainWindow = new MainWindow();
MainWindow.Closing += MainWindow_Closing;
Notifica = new System.Windows.Forms.NotifyIcon();
Notifica.DoubleClick += (s, args) => VisualizzaForm();
Notifica.Icon = new System.Drawing.Icon("accept.ico");
Notifica.Visible = true;
CreazioneMenu();
}
Figura 3 - L'icona nella traybar
Conclusioni
In questo articolo si è fornito al lettore una tecnica di come aggiungere alla propria applicazioni la possibilità di gestire il proprio programma la funzionalità di ridurlo a icona nella barra dell’orologio, dando così all’utilizzatore di Windows, di avere poche finestre aperte ed al tempo stesso il programma già attivo.
Tecnica usata in passato per lo sviluppo di applicazioni di tipo “Windows Application” ora applicabile anche per i progetti di tipo Windows Presentation Foundation”.