Button Class - Añadiendo botones

Aprovecharemos nuestro conocimiento sobre señales y eventos para hacer algo menos estático. ¿Qué tal si agregamos un botón a nuestra a aplicación? Perfecto. pero antes que nada, revisaremos como se define un botón, algunas cosas importantes que destacar, etc.

Un botón se crea mediante la clase Button, con el ya conocido new(), el cuál tiene dos constructores básicos:

A final de cuentas, tenemos dos constructores y un método para crear botones, con lo cual ya podemos proceder a escribir nuestra aplicación, un "¡Hola Mundo!" con un botón.

Atención

El próximo ejemplo se basará en un ejemplo existente en la página de MonkeyGuide ( http://mono.jroith.de/monkeyguide/ ), y es de la autoría de Johannes Roith.

Un nuevo "¡Hola Mundo!" - public Button ( string )

De nuevo procederemos en la forma tradicional, definiendo lo "básico":

 
using System;
using Gtk;
using GtkSharp;

 public class Tester {

        /* Estos método se encargan de mostrar en la terminal el
         * mensaje y después detener la aplicación. */
        static void DetenerAplicacion ( object obj, DeleteEventArgs args )
        {

                Console.WriteLine("Ha ocurrido el evento DeleteEvent ");
                Application.Quit();

        }

        public static void Main ( string[] args ) {

                // Esta linea es indispensable en todas nuestras aplicaciones
                Application.Init();

                Window win = new Window(" ¡Hola Mundo! ");
                Button boton = new Button(" ¡Hola Mundo! ");

                win.DeleteEvent += new DeleteEventHandler(DetenerAplicacion);

                win.BorderWidth = 10; // Especificamos el ancho del borde
                win.Add(boton);

                // Mostramos TODOS los widgets definidos como hijos de win
                win.ShowAll();

                Application.Run();
 
        } 
 
 }

Todo bien hasta aquí. Solamente hay que poner atención en la línea win.ShowAll(), que se encarga de mostrar a todos los widgets que estén contenidos dentro de, en este caso, el objeto win de tipo Window. Des esta forma, nos podemos ahorrar unas cuantas listas, ya que equivale a ejecutar el método Show() para cada elemento.

De acuerdo, ya podemos tener cierto control sobre la aplicación, solamente que ... pues nuestro botón está de adorno, pues al presionarlo, no sucede algo en especial. Así que implementaremos un Callback Method ( de ahora en adelante lo llamaremos "callback" para ahorrar saliva :P ), que muestre un mensaje en la terminal, y le llamaremos MiCallback, pasándolo a través de un EventHandler al evento Clicked de la clase Button ( este evento sucede al ser oprimido el botón ).

 
using System;
using Gtk;
using GtkSharp;

 public class Tester {

        /* Estos método se encargan de mostrar en la terminal el
         * mensaje y después detener la aplicación. */

        static void MiCallback ( object obj, EventArgs args )
        {

                Console.WriteLine(" ¡Hola Mundo! ");
                Application.Quit();

        }

        static void DetenerAplicacion ( object obj, DeleteEventArgs args )
        {

                Console.WriteLine("Ha ocurrido el evento DeleteEvent ");
                Application.Quit();

        }

        public static void Main ( string[] args ) {

                // Esta linea es indispensable en todas nuestras aplicaciones
                Application.Init(); 
 
                Window win = new Window(" ¡Hola Mundo! ");
                Button boton = new Button(" ¡Hola Mundo! ");

                win.DeleteEvent += new DeleteEventHandler(DetenerAplicacion);

                win.BorderWidth = 10; // Especificamos el ancho del borde 
                win.Add(boton);

                // Conectamos Micallback con el evento Clicked de boton
                boton.Clicked += new EventHandler(MiCallback);
 
                // Mostramos TODOS los widgets definidos como hijos de win 
                win.ShowAll(); 
 
                Application.Run(); 
  
        } 
 
 }

¡Qué bien, ahora al presionar el botón ya hace algo!, sí, cierra la ventana después de saludarnos en la terminal. Este ejemplo también nos sirve para ver que el método Application.Quit() también puede ser llamado desde callbacks "comunes y corrientes".

Otro ejemplo de Botones - NewFromStock ( string stock_id )

Hemos llegado a la última sección de la parte de botones ( aunque seguiremos revisándolos en las siguientes secciones ), abordando la creación de botones pre-definidos. Recordemos simplemente que para crear este tipo de botones, no contamos con un constructor como tal, sino con un método llamado Button NewFromStock ( string stock_id ), que recibe la cadena que especificará el tipo de botón.

Porque dicen que es mejor practicar que solamente leer, pasemos a crear nuestra pequeña aplicación:

 
using System;
using Gtk;
using GtkSharp;

 public class Tester {

        /* Estos método se encargan de mostrar en la terminal el
         * mensaje y después detener la aplicación. */

        static void MiCallback ( object obj, EventArgs args )
        {

                Console.WriteLine(" ¡Hola Mundo! ");
                Application.Quit();

        }

        static void DetenerAplicacion ( object obj, DeleteEventArgs args )
        {

                Console.WriteLine("Ha ocurrido el evento DeleteEvent ");
                Application.Quit();

        }

        public static void Main ( string[] args ) {

                // Esta linea es indispensable en todas nuestras aplicaciones
                Application.Init(); 
 
                Window win = new Window(" ¡Hola Mundo! ");
                Button boton = Button.NewFromStock(Gtk.Stock.Ok);

                win.DeleteEvent += new DeleteEventHandler(DetenerAplicacion);

                win.BorderWidth = 10; // Especificamos el ancho del borde 
                win.Add(boton);

                // Conectamos Micallback con el evento Clicked de boton
                boton.Clicked += new EventHandler(MiCallback);
 
                // Mostramos TODOS los widgets definidos como hijos de win 
                win.ShowAll(); 
 
                Application.Run(); 
  
        } 
 
 }

Atención

Una lista completa de los Stock_id puede ser encontrada en la página de MonkeyGuide, http://mono.jroith.de/monkeyguide/gnome/bindings/gtk-sharp/gtk-sharp.html