Programando un "Hola Mundo" con MonoDevelop
Después de habernos empapado con un poco de
información sobre Mono, C# y Gtk#, es
la hora de empezar a probar MonoDevelop
(0.11 es la versión que tengo). Así que voy a crear una aplicación tipo "Hola Mundo" con MonoDevelop.Primero, podemos lo podemos hacer sin Gtk#, osea con puro C#, lo cual es bastante fácil, solo es necesario crear un archivo de texto con las siguientes lineas:
using System;
namespace HolaMundo
{
class MainClass
{
static void Main()
{
Console.WriteLine("Hola Mundo!!!");
}
}
}
Guardamos el archivo con algún nombre, por ejemplo: "holamundo.cs". La extensión "cs" es la usada para archivos de "C Sharp".
Por último es necesario compilarlo y ejecutarlo de la siguiente forma:
[nexus@Develop ~]$ mcs holamundo.cs
[nexus@Develop ~]$ ./holamundo.exe
Hola Mundo!!!
Con la primera línea compilamos el archivo "holamundo.cs" por medio de "mcs" (Mono C Sharp). En la segunda línea ejecutamos el resultado de la compilación "holamundo.exe". Si, efectivamente, por compatibilidad con .NET el binario tiene una extensión "exe" como en Windows, sin embargo esto es solo por compatibilidad, ya que realmente este archivo es "CIL" que a su vez es interpretado por Mono en Linux o .NET framework en Windows. Por último la tercera línea muestra el resultado de la ejecución.
Pero la idea de este artículo es la de usar MonoDevelop, por lo que desde ahora lo usaré para crear un "HolaMundo" con una interacción de un botón.
Lo primero que hay que hacer es crear una nueva solución, la cual se puede crear de forma automatizada desde el menú "Archivo" y "Nuevo Proyecto...", la cuál nos abrirá una ventana llamada "Nueva Solución", desde ahí es necesario seleccionar un "Proyecto Gtk# 2.0" y ponerle un nombre a la solución, por ejemplo "HolaMundo", por último pulsamos sobre "New" para que MonoDevelop se encargue de crear todos los archivos necesarios para comenzar a trabajar.
De entre todos los archivos de la solución, existen dos que son importantes "Main.cs" y "MainWindow.cs" los cuales se pueden ver en la pestaña de "Solución"
Para empezar a trabajar con el diseño de la nueva aplicación se debe seleccionar "MainWindow.cs" y pulsar sobre el botón "Diseñador" en la parte inferior de esa ventana. Con lo anterior lograremos ver la venta que podemos usar para el diseño.
Para los que nunca han trabajado con diseñadores para Gtk, es importante aclarar que Stetic no trabaja como el diseñador de formularios de MS Visual Studio, ya que este no se basa en coordenadas para la construcción y dibujo de los controles, mas bien es necesario ocupar los Widgets (componentes) "HBox" y "VBox" e imaginarnos como quedaría el formulario usando tablas.
A lo que me refiero es que los controles o componentes deben estar dentro de alguno de estos u otros contenedores. Para ser más gráfico, en este ejemplo quiero usar dos controles; un "Label" y un "Button" y quiero que al pulsar sobre el botón aparezca en la etiqueta un "Hola Mundo". Por lo tanto, necesito pensar en el orden en que estarán los controles, por lo que para esta pequeña prueba solo necesito una tabla de una columna y dos filas usando el "VBox" y después incluyendo los controles en su fila correspondiente.
Ahora es necesario ponerle nombre a los controles, esto se logra usando las pestaña de "Propiedades de Componente", es tan simple como seleccionar el control y modificar su propiedades de forma muy fácil.
En este proyecto uso los siguientes valores:
Para el "MainWindow"
Window Title: Proyecto Hola Mundo
Window Position: Centered
Para el "label"
Widget name: texto
Label: Presiona el botón
Justification: Center
Para el "button"
Widget name: boton
Buton Type: Text and Icon
Icon: gtk-yes
Label: Aceptar
El siguiente paso a seguir es declarar la acción del botón, que cuando se de un click este haga algo, para realizar esta declaración es necesario seleccionar el botón y después ir a la pestaña "señales" en las "Propiedades del componente". Ahí podremos ver un listado de comportamientos de control, buscamos el que se usa al pulsar el botón que se llama "Clicked". Al lado de este evento veremos un mensaje que dice "Click here to add a new handler", así que le hago caso y le doy un click para ponerle un nombre... se me ocurre por ejemplo: "boton_Clicked", osea "boton" ya que es el nombre del control y agregarle el sufijo del nombre del evento, para que nuestro código tenga coherencia.
Ya casi termino de usar el diseñador para empezar a programar, lo único que hace falta es seleccionar el "label" y pulsar sobre el botón "Asociar a Campo", y hay que hacer exactamente lo mismo con el "button", esto sirve para que MonoDevelop declare el uso de los controles en la clase.
Listo, ahora es tiempo de ir a trabajar sobre el código pulsando sobre el botón "Código Fuente" del "MainWindow.cs" y veremos lo siguiente:
using System;
using Gtk;
public class MainWindow: Gtk.Window
{
protected Gtk.Label texto;
protected Gtk.Button boton;
public MainWindow (): base ("")
{
Stetic.Gui.Build (this, typeof(MainWindow));
}
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Application.Quit ();
a.RetVal = true;
}
protected virtual void boton_Clicked(object sender, System.EventArgs e)
{
}
}
Veremos varias diferencias entre la versión de cuando iniciamos el proyecto a este momento. Las mas significativas son:
protected virtual void boton_Clicked(object sender, System.EventArgs e)
{
}
Estas lineas fueron agregadas por MonoDevelop al momento de nombrar el evento "Clicked".
protected Gtk.Label texto;
protected Gtk.Button boton;
Estas lineas fueron agregadas cuando pulse sobre el botón "Asociar a Campo" seleccionado el "label" y el "button".
Ahora si, es el momento de escribir código!!!
protected virtual void boton_Clicked(object sender, System.EventArgs e)
{
texto.Text = "Hola Mundo!!!";
}
Ya quedó, eso fue todo, únicamente una sola linea de código (agregar la tercera linea) y la aplicación ya esta lista para ser compilada, así de fácil, ¿no es impresionante?. Podemos probar como funciona nuestra aplicación de forma rápida, pulsando sobre el icono de ejecutar.
Y veremos nuestra aplicación funcionando correctamente!!!
Esta ejecución genera el ejecutable automáticamente, por lo que podemos ver el binario compilado en su lugar correspondiente:
[nexus@Develop Projects]$ ls holamundo/bin/Debug/
holamundo.exe holamundo.exe.mdb
Por lo que me entra la duda, ¿esto funcionará en windows?... voy a probar.
Ya tengo instalado el .NET framework 1.0, 1.1 y 2.0 así que no creo tener problemas con eso, sin embargo es necesario instalar el runtime de Gtk# para que la aplicación pueda correr correctamente, por lo que es necesario bajarlo desde la página de Gtk# para Windows e instalarlo.
Ya, es momento de ejecutar la aplicación y efectivamente, funciona correctamente.
Por el momento eso es todo, en los siguientes articulos exploraré algunos Widgets y como usarlos desde MonoDevelop.
El proyecto y código relacionado están disponibles en el siguiente archivo.
| Adjunto | Tamaño |
|---|---|
| HolaMundo.tar.gz | 5 KB |
![]() |
es la primera vez que hago una aplicacion en mi ubuntu! Gracias por el tutorial ;D |
![]() |
Que bueno que te fue de utilidad, te invito a que sigas leyendo los demás artículos que he escrito sobre MonoDevelop Si descubres algo interesante, en este lugar tienes un foro abierto donde más personas podrán leerte y entre todos aprender. Saludos |
![]() |
Xurras!!!... llevo mucho tiempo esperando encontrar una explicación "for dummies" y no había conseguido nada. |
![]() |
Hola me parece que esta super bien, estoy trabajando mi tesis en monodevelop y es de mucha ayuda |
![]() |
Que bueno que te fué de utilidad, si en el camino, descubres cosas que creas sean interesante documentar, aquí dispones de un espacio para publicarlo. |
![]() |
He seguido los pasos y fue mi primera aplicacion en monodevelop y en linux en general |
![]() |
Que bueno que te fué de utilidad, de igual forma te invito a que si vas descubriendo cosas que a tu parecer sean interesantes documentar, dispones del espacio en este sitio. Saludos |
![]() |
Hola buenas, he estado haciendo el tutorial, pero no puedo hacer lo que me pide la antepenultima captura de asociar a campo, en el monodedelop que tengo(0.16) no viene, o puede que la haya quitado toqueteando, gracias de antemano, no se si ha llegado uno que he mandado antes si es asi perdon. |
![]() |
Hola En la versión que tienes de MonoDevelop (0.16) no existe (y no necesitras) el botón "Asociar a Campo", ya que en la version que tu tienes, la delcaración de campos se realiza de forma automática, con lo cual hacemos más eficiente el "diseño" de nuestra aplicación. Saludos |
![]() |
Necesito realizar una aplicacion en donde requiero de no. botones ,label y etry COMO visualizar registros de bases de datos con que lo hago |
![]() |
Tengo en mi maquina en la partición Windows instalado mono, GTK, Visual NET 2005 y otras que no recuerdo, he logrado hacer una prueba con las librerías GTK y mono, anda todo perfecto. |
![]() |
Si se puede, si abres tu proyecto con MonoDevelop, abre el menú "Proyecto" y selecciona la opción "Exportar...". Se abrirá una ventana de dialogo donde te pide el formato del archivo, selecciona "Visual Studio .NET 2005", selecciona un lugar donde exportar y pulsa en aceptar. Espero ser de ayuda, saludos |
![]() |
Gracias excelente conciso y preciso, la exportación la hizo sin problemas, visual estudio 2005 levantó la exportación sin problemas. |
![]() |
Algunos detalles respecto con la exportacion a Visual 2005 que quizás esté en otra hebra, resulta que al principio no me reconocía las referencias y las tuve que referenciar a mano, ¿existe alguna restricción con respecto a las referencias que genera el monodevelop?, por otro lado me genero un error después de haber reconocido las referencias no lograba encontrar el archivo “libgtk-win32-2.0-0.dll”, así que leyendo algunos foros decidí colocar todas las librerías que se encuentran en “c:\Archivos de Programa\mono-1.9\bin” en donde visual estudio genera el ejecutable, y ahí recién funcionó, tengo en la variable de entorno PATH la ruta de estas librerías (así debiera funcionar) pero solo funcionó copando las librerias a la carpeta del ejecutable, ¿existe algo más que se deba hacer? |
![]() |
Tengo instalado el Gtk# for windows y el .net framework, pero al momento de correrlo me sale en consola algo asi como : Excepcion no contrlada: System.IO.FileNotFoundException: No se puede cargar el archivo o ensamblado 'gtk-sharp, Version 2.12.0.0, Culture= neutral, PublicKeyToken= 35e10195dab3c99f' ni una de sus dependencias Dice mas letras pero sale demasiado rapido y no alcanzo a leer, me podrian ayudar??? |
![]() |
Tengo Ubuntu 8.10 con su MonoDevelop 1. |
![]() |
En http://blackshell.usebox.net/archivo/1173.php se discute el problema, Miguel de Icaza se disculpa y el autor del post nos indica cual fue la solución que utilizó: básicamente utilizar una versión de gtk# anterior como se explica en http://www.monodevelop.com/MonoDevelop_1.0_Released#Visual_Designer_for_GTK.23 bajo el título Support for targeting multiple GTK# versions. |
![]() |
Tengo instalado mono-1.9.1 con MonoDevelop 1.0 con Gtk# 2.8.5 en mi Kubuntu 8.04 hardy Heron, al momento de la creacion de Gtk# 2.0 Project, me sale el siguiente mensaje: Exception occurred: Could not load type 'Pango.EllipsizeMode, pango-sharp, Version=2.6.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f' System.TypeLoadException: Could not load type 'Pango.EllipsizeMode, pango-sharp, Version=2.6.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f' at Stetic.Registry.GetType (System.String typeName, Boolean throwOnError) [0x00000] at Stetic.EnumDescriptor..ctor (System.Xml.XmlElement elem) [0x00000] at Stetic.WidgetLibrary.Load (System.Xml.XmlDocument objects) [0x00000] at Stetic.AssemblyWidgetLibrary.Load () [0x00000] at Stetic.Registry.RegisterWidgetLibrary (Stetic.WidgetLibrary library) [0x00000] Se crea el proyecto pero no habre los .cs saliendome el mismo error, muy ilustrativo tu tuto, aver si me puedes dar una manito. |
![]() |
Revisa si tienes sudo apt-get install libgtk2.0-cil Ojalá que eso sea lo que te afecte. Saludos |
![]() |
Exception occurred: ya no aparece mas, tenias razon me faltaba esa libreria. A manera de comentario, un problema que tuve al ejecutar fue: que no encontraba el archivo gmcs en el /usr/bin, hice una copia del archivo donde instale /opt/mono-1.9.1/bin y soluciono el problema. Muchas gracias por la pronta respuesta espero sigas subiendo tutos como este que son de muchisima ayuda para los que recien se estan metiendo en el mundo de mono como yo. |
![]() |
hola. |
![]() |
Hola rukitas, púes en realidad si se pueden hacer reportes con MonoDevelop... el problema es que no se hace con la misma facilidad de CR. Para poder hacer reportes decentes tendrás que hacer uso de herramientas externas como por ejemplo También existe otro que he escuchado es muy bueno Saludos |
![]() |
Hola como estas estuve siguiendo los pasos que indica el tutorial. pero tengo los siguiente inconvenientes: - No me aparece la opcion "Asociar campos" tengo la version 1.0 Por lo que lei arriba creo que ya no hace falta.. - Cuando corro la aplicacion y hago clik sobre el boton inmediatamente se cierra la ventana y no veo el cambio. Que puedo estar haciendo mal??? Muchas gracias |




Excelente, los felicito, seguí los pasos al pie de la letra y me funcionó correctamente.
Ahora estoy jugando a crear una pequeña aplicacion que necesito.