gentoo linux, java, software libre y otras hierbas
May, 05 2008 - 4:03 pm

Aplicaciones con GUI en .NET: ¿Gtk# o Windows Forms?

Hace tiempo discutía con algunas personas la mejor manera de usar Mono tanto en el escritorio Linux como en Windows. Me refiero al momento de escoger entre Windows Forms y Gtk#, para desarrollar aplicaciones con interfaz gráfica. Personalmente pienso que la mejor opción es, inclinándome hacia el lado del software libre, usar Mono + Gtk#. Claro, eso también depende de tus gustos como desarrollador y, más importante aún, de las necesidades del proyecto a realizar.

Lo que quiero enseñarles en esta entrada es cómo se pueden tomar diferentes caminos, y aclarar algunas dudas que me han planteado ciertos lectores. Siendo así, vamos a tomar como ejemplo a dos programas sencillos: el primero usando Gtk# y corriendo tanto en Linux como Windows, y el otro usando Windows Forms corriendo tanto en Windows como Linux.

Desarrollando y ejecutando aplicaciones Gtk# y Windows Forms usando Mono

Antes de comenzar con los ejercicios, veamos qué necesitamos para desarrollar y ejecutar aplicaciones que usen Gtk# y Windows Forms. Es necesario (obviamente) tener dicho framework instalado; afortunadamente, la mayoría de las distribuciones Gnu/Linux actuales tienen los paquetes necesarios en los repositorios, e incluso vienen con lo necesario para ejecutar aplicaciones desarrolladas con Mono (como Tomboy, Fspot o Banshee). Para compilar aplicaciones C# para mono es necesario utilizar el CSharp Compiler (cms).

También, es posible descargar mono para los más importantes sistemas operativos, incluyendo por supuesto sistemas Microsoft Windows. Para tal caso es posible descargar una versión completa (Mono + Gtk# + XSP), o tan solo el intérprete + Gtk# para un Framework .NET ya instalado sobre el ordenador.

Código del programa que usa Gtk#


//Ejemplo GTK (EjemploGtk.cs)
using Gtk;
using System;
class EjemploGtk {
static void Main()
{
Application.Init ();
//Crear el boton
Button btn = new Button (“Hola monito!”);
//Asignar un evento al evento Clic del boton
btn.Clicked += new EventHandler (hola);
//Crear el objeto ventana
Window ventana = new Window (“Lindo primate!”);
//Asignar un metodo al evento Cerrar ventan
ventana.DeleteEvent += new DeleteEventHandler (cerrar_ventana);
//Asigna el ancho y alto de la ventana
ventana.DefaultWidth = 200;
ventana.DefaultHeight = 60;
//Anyadir el boton a la ventana
ventana.Add (btn);
//Mostrar la ventana
ventana.ShowAll ();
//Ejecutar la aplicacion
Application.Run ();
}
static void cerrar_ventana (object obj, DeleteEventArgs args)
{
Application.Quit ();
}
static void hola (object obj, EventArgs args)
{
Console.WriteLine(“Lindo monito!”);
Application.Quit ();
}
}

Para compilarlo y ejecutarlo puedes usar los siguientes comandos:

mcs -pkg:gtk-sharp-2.0 EjemploGtk.cs
mono EjemploGtk.exe

El resultado es el mismo tanto en Linux como en Windows:

gtk sobre linux gtk-sharp sobre windows

Código del programa que usa Windows Forms

Este programa hace exactamente lo mismo que el anterior, pero esta vez usando Windows Forms para la interfaz gráfica:

//Ejemplo Windows Forms (EjemploWinForms.cs)
using System.Drawing;
using System.Windows.Forms;
using System;
class EjemploWinForms : Form{
static void Main(){
Application.Run(new EjemploWinForms());
}
public EjemploWinForms() {
//Crear e iniciar el boton, y sus propiedades
Button boton = new Button();
boton.Location = new Point(0, -1);
boton.Name = “boton”;
boton.Size = new System.Drawing.Size(193, 60);
boton.TabIndex = 0;
boton.Text = “Botoncito”;
//Asignar un evento al evento Clic del boton
boton.Click += new System.EventHandler(hola);
//Indicar el tamanyo de la ventana
ClientSize = new System.Drawing.Size(193, 60);
//Anyadir el boton
Controls.Add(boton);
Text = “Ventanita”;
ResumeLayout(false);
}
private void hola(object sender, EventArgs e) {
Console.WriteLine(“Un mensajito!”);
Close ();
}
}

Para compilarlo y ejecutarlo puedes usar los siguientes comandos:

mcs -r:System.Drawing.dll,System.Windows.Forms.dll EjemploWinForms.cs
mono EjemploWindowsForms.exe

El resultado es el mismo tanto en Linux como en Windows:

windows forms sobre linux windows forms sobre windows

Consideraciones a tener en cuenta

Al momento de desarrollar aplicaciones con GUIs en C# de manera rápida, tenemos basicamente dos opciones:

  • Podemos usar Monodevelop que incluye un editor de interfaces gráficas basado en Stetic y que por supuesto desarrolla dichas interfaces bajo Gtk#.
  • O usar el editor de interfaces de Microsoft Visual Studio que, aunque no es libre, he de reconocer que es bastante bueno y completo. En este caso las aplicaciones correrían usando Windows Forms.

Por supuesto, si deseamos usar Mono como plataforma de desarrollo no vale la pena usar herramientas Microsoft. De hecho, opino que el framework de Mono incluye librerías para ejecutar aplicaciones que usen Windows Forms, no con el fin de desarrollar aplicaciones que usen dichas librerías, sino para facilitar la migración de proyectos existentes hacia Mono.

Enlaces interesantes

Descargar código fuente de los ejemplos

25 Comentarios | deja el tuyo

2 enlaces entrantes

23 Comentarios en “Aplicaciones con GUI en .NET: ¿Gtk# o Windows Forms?”

  1. Cristian dice:

    Dice básicamente que no encuentra la librería gdiplus.dll. ¿Estás en Linux o en Windows? Que tal si buscas esa librería a ver si está :P

    Un saludo.

  2. carlos dice:

    hola que tal . yo se que no es el momento pero quisiera konocer amigos
    no importa edad, sexo, ni de donde sean
    me llamo carlos
    tengo 16 años
    y soy de san fernando temaulipas…
    les aseguro que no se van a arepentyr de habermne conocido…
    se los aseguro 100%

  3. carlos dice:

    hola que tal . yo se que no es el momento pero quisiera konocer amigos
    no importa edad, sexo, ni de donde sean
    me llamo carlos
    tengo 16 años
    y soy de san fernando temaulipas…
    les aseguro que no se van a arepentyr de habermne conocido…
    se los aseguro 100%
    mi correo es :arcangel-c-j@hotmail.com

  4. jesus dice:

    hola! por que no me acepta lo sig?

    using system.Windows……

    Que debo de instalar?

    Gracias

  5. Juan dice:

    No entiendo por que dices que Windows Forms no vale la pena usarlo por que no es libre. Debes saber que Mono ha implementado su propia versión de Windows Forms y es libre como todo el Framework.

  6. Revisen la aplicacion SESHAT esta en Mono+GTK+PostgreSQL

    Sistema de Facturacion y Punto de Venta

    http://sourceforge.net/projects/seshat-fact-pv/

    Probada en Windows y Linux

  7. Andrés dice:

    Me parece que estás perdido. Programas una aplicación con Windows Forms de Mono y hablas de Microsoft. El windows forms que viene con mono es de mono y de nadie más, y por lo tanto es libre.

    Deberías fundamentarte un poco más para dar un concepto.

¡Déjanos tu comentario!