ATTENZIONE: MESSAGGIO PER NA
BABBI

Ho appena iniziato ad utilizzare
C# e
GTK con
MonoDevelop ed ho avuto un piccolo problema con i
messaggi di dialogo. In rete ho trovato molte informazioni, ma niente che possa chiarire la mente contorta di un nabbo (io).
Innanzitutto i messaggi devono essere portati in Run() perché devono restituire la risposta (Si, No, Ok, ecc...) e si devono chiudere con Destroy() altrimenti il programma crasha con il messaggio successivo. Quindi niente Dott. Show() e Mr. Hide()... ci diventerete matti.
Siccome ogni volta è necessario inizializzare il messaggio è fastidioso riscrivere tutto d'accapo. Con questa piccolissima guida conoscerete una cosa essenziale della programmazione: la modularità . Se un programma non è modulare aumentano gli errori umani e il debug è più complesso.
using System;
using Gtk;
public partial class MainWindow : Gtk.Window
{
public MainWindow() : base(Gtk.WindowType.Toplevel)
{
Build();
}
/*
* Chiude la finestra
*/
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
esci();
a.RetVal = true;
}
/*
* Semplifica la gestione dei messaggi
*/
private ResponseType messaggio (String corpoMessaggio, String titoloMessaggio, Gtk.MessageType tipoMessaggio, Gtk.ButtonsType bottoniMessaggio)
{
Gtk.MessageDialog msg = new Gtk.MessageDialog(this, DialogFlags.Modal, tipoMessaggio, bottoniMessaggio, corpoMessaggio);
msg.Title = titoloMessaggio;
ResponseType risposta = (ResponseType) msg.Run();
msg.Destroy();
return risposta;
}
/*
* Esce dall'applicazione?
*/
private void esci()
{
ResponseType risposta = messaggio("Vuoi uscire dall'applicazione?","Domanda", MessageType.Question, ButtonsType.YesNo);
if (risposta == ResponseType.Yes)
{
Application.Quit();
}
else if (risposta == ResponseType.No)
{
// Niente
}
}
/*
* Click dei bottoni
*/
protected virtual void ClickBtnAvvia (object sender, System.EventArgs e)
{
ResponseType risposta = messaggio("Avvia l'acquisizione","Informazione", MessageType.Info, ButtonsType.Ok);
if (risposta == ResponseType.Ok)
{
txtAnteprima.Bueffe:r.Text += "Messaggio: Ok\n";
}
else if (risposta == ResponseType.DeleteEvent)
{
txtAnteprima.Bueffe:r.Text += "Messaggio: Ics\n";
}
}
protected virtual void ClickBtnFerma (object sender, System.EventArgs e)
{
txtAnteprima.Bueffe:r.Text += "Ferma l'acquisizione\n";
}
protected virtual void ClickBtnSalva (object sender, System.EventArgs e)
{
txtAnteprima.Bueffe:r.Text += "Salva i dati acquisiti\n";
}
protected virtual void ClickBtnOpzioni (object sender, System.EventArgs e)
{
txtAnteprima.Bueffe:r.Text += "Modifica le opzioni di connessione alla seriale\n";
}
protected virtual void ClickBtnEsci (object sender, System.EventArgs e)
{
esci();
}
}
Per far funzionare la domanda alla chiusura della finestra ho implementato il segnale DeleteEvent().
Ma che fai? Clicki? :bboni:
Ho iniziato a programmare in Pascal (Turbo Pascal. Fa molto James Bond) a scuola con le guide di Tutankamon e subito dopo in VisualBasic con le guide di Anubi. Poi cambiai scuola ed iniziai con il Java e le
API ufficiali: mi piacque mol:tis:simo, soprattutto per la portabilità . Continuai con quello fin quando non mi resi conto che gli adattatori USB-Seriali non rendono la vita facile con Java, per cui Sun
consiglia di comprare degli
adattatori compatibili con Java. Addio Java

P.S.
Mi sono divertito un anno con Assembly. Ostico, ostico, osticazzi, ma bello

Buona programmazione