<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux, Java y programación &#187; mono</title>
	<atom:link href="http://casidiablo.net/category/programacion/net/mono/feed/" rel="self" type="application/rss+xml" />
	<link>http://casidiablo.net</link>
	<description>Blog de Java, Programación y Linux</description>
	<lastBuildDate>Sun, 18 Jul 2010 04:54:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Video Tutorial de Introducción a MonoDevelop</title>
		<link>http://casidiablo.net/video-introduccion-monodevelop/</link>
		<comments>http://casidiablo.net/video-introduccion-monodevelop/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 03:22:08 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[video tutoriales]]></category>
		<category><![CDATA[monodevelop]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=3063</guid>
		<description><![CDATA[¡Hola de nuevo! En esta ocasión me gustaría compartir con ustedes este video tutorial acerca de MonoDevelop. No es nada avanzado, solo muestra algunas características de este IDE. El video en cuestión lo grabé hace más o menos siete meses, pero casualmente había olvidado que lo había grabado Y, aunque ya vamos en la versión [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fvideo-introduccion-monodevelop%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Video%20Tutorial%20de%20Introducci%C3%B3n%20a%20MonoDevelop%22%20%7D);"></div>
<p style="text-align: justify;">¡Hola de nuevo! En esta ocasión me gustaría compartir con ustedes este video tutorial acerca de MonoDevelop. No es nada avanzado, solo muestra algunas características de este IDE. El video en cuestión lo grabé hace más o menos siete meses, pero casualmente había olvidado que lo había grabado <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  Y, aunque ya vamos en la versión 2 de MonoDevelop, no quiero perder el trabajo que alguna vez hice.</p>
<p style="text-align: justify;"><embed src="http://blip.tv/play/g9MGgYjCR5OibA%2Em4v" type="application/x-shockwave-flash" width="640" height="430" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p style="text-align: justify;">Como siempre, pueden encontrar el vídeo en <a title="Esta dividido en dos partes (Youtube solo deja videos menores de 10 minutos)" href="http://www.youtube.com/watch?v=sbdI1iSoRYE">Youtube</a> o en <a href="http://www.vimeo.com/5084692">Vimeo</a>. Aunque creo que hay un pedazo que se ve feo y el sonido no es el mejor, espero que les guste y disculpen lo feo <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/video-introduccion-monodevelop/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Números aleatorios en C#</title>
		<link>http://casidiablo.net/numeros-random-c-sharp/</link>
		<comments>http://casidiablo.net/numeros-random-c-sharp/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 17:02:52 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[juegos]]></category>
		<category><![CDATA[monodevelop]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1143</guid>
		<description><![CDATA[La generación de números aleatoreos es una de las prácticas más importantes en cualquier lenguaje de programación, sobre todo cuando deseamos desarrollar juegos, por ejemplo. Para usar números aleatorios en C# podemos utilizar la clase Random del namespace System, de la siguiente manera: Random objeto = new Random(); int numero = objeto.Next(); El método Next [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fnumeros-random-c-sharp%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22N%C3%BAmeros%20aleatorios%20en%20C%23%22%20%7D);"></div>
<p>La generación de números aleatoreos es una de las prácticas más importantes en cualquier lenguaje de programación, sobre todo cuando deseamos desarrollar juegos, por ejemplo. Para usar números aleatorios en <a href="http://casidiablo.net/c-y-net/">C#</a> podemos utilizar la clase <strong>Random</strong> del namespace <strong>System</strong>, de la siguiente manera:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">Random objeto = new Random();
int numero = objeto.Next();</pre>
<p><!--INFOLINKS_ON--></p>
<p>El método Next de la clase Random genera y devuelve un número aleatorio entre 0 y la constante <strong>Int32.MaxValue</strong> (2,147,483,647). El número es generado después de (como decía mi profesora de matemáticas) <em>complejos procesos matemáticos</em>, y como en casi todos los lenguajes necesitan de una semilla (seed) para ser generados, que por defecto es la hora del sistema.</p>
<p>Aún así, muchas veces necesitamos que el número sea generado en un rango específico de valores. Por ejemplo, para una aplicación que simule el lanzamiento de un dado de seis caras necesitamos generar números entre 1 y 6. Para lograr esto, el método <strong>Next</strong> puede recibir además un entero que indica el rango máximo del número aleatorio. Por ejemplo, el código:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">Random objeto = new Random();
int numero = objeto.Next(6);</pre>
<p><!--INFOLINKS_ON--></p>
<p>generaría un número aleatorio entre 0 y 7 (pero no 6), es decir, seis posibles números. Pero, si desearamos algún rango más exacto, podríamos hacer algo como:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">Random objeto = new Random();
int numero = objeto.Next(1, 7);</pre>
<p><!--INFOLINKS_ON--></p>
<p>lo que generaría números entre 1 y 7 (pero no 7), de nuevo seis números posibles.</p>
<h3>Ejemplo completo&#8230;</h3>
<p>En el siguiente ejemplo se utilizará la clase <strong>Random</strong> para generar una serie de números aleatorios cada vez que se presiona un botón:</p>
<p style="text-align: center;"><img class="aligncenter" title="pantallazo numero aleatorio" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/07/pantallazo-numero-aleatorio.png" alt="pantallazo numero aleatorio" /></p>
<p>El código lo pongo para su descarga abajo, ya que lo hice con <a href="http://casidiablo.net/aplicaciones-con-gui-en-net-%c2%bfgtk-o-windows-forms/">Gtk# usando MonoDevelop</a>, y sería engorroso poner todo el código. Así que solo pondré la parte del código que nos interesa:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">    private Random obj = new Random();
    //Método ejecutado al presionar el botón
    protected virtual void generar_Click (object sender, System.EventArgs e)
    {
        etiqueta.Text = &quot;&quot;;
        for(int i = 0; i &lt; 4 ; i++)
        {
            for(int j = 0; j &lt; 4 ; j++)
                etiqueta.Text += obj.Next(1, 10) +&quot;\t\t&quot;;
            etiqueta.Text += &quot;\n\n&quot;;
        }
    }</pre>
<p><!--INFOLINKS_ON--></p>
<h3>Enlaces y descargas</h3>
<ul>
<li><a href="http://casidiablo.net/descargar/Numeros+Aleatorios+C+Sharp" class="tooltip" title="Proyecto para MonoDevelop">Descargar código fuente del ejemplo (usando Gtk#)</a></li>
<li><a href="http://casidiablo.net/descargar/RandomInt" class="tooltip" title="Proyecto para VisualStudio">Descargar proyecto similar en inglés (usando Windows Forms)</a></li>
<li><a href="http://casidiablo.net/aplicaciones-con-gui-en-net-%c2%bfgtk-o-windows-forms/" class="tooltip" title="¿Tienes dudas al elegir? Consulta!">Aplicaciones con GUI en .NET: ¿Gtk# o Windows Forms?</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/numeros-random-c-sharp/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Paso de variables Por Referencia vs Por Valor [C#]</title>
		<link>http://casidiablo.net/funciones-referencia-valor-c-sharp/</link>
		<comments>http://casidiablo.net/funciones-referencia-valor-c-sharp/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 18:40:16 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=967</guid>
		<description><![CDATA[En C#, como en Java, u otros lenguajes de programación, es posible pasar variables a los métodos (funciones) de dos maneras: Por referencia y Por valor. La diferencia entre el uno y el otro es básicamente que: Cuando una variable es pasada por valor, el método recibe una copia del valor de la variable. Por [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Ffunciones-referencia-valor-c-sharp%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Paso%20de%20variables%20Por%20Referencia%20vs%20Por%20Valor%20%5BC%23%5D%22%20%7D);"></div>
<p>En <a href="http://casidiablo.net/c-y-net/">C#</a>, como en <a href="http://casidiablo.net/java/">Java</a>, u otros lenguajes de programación, es posible pasar variables a los métodos (funciones) de dos maneras: Por referencia y Por valor. La diferencia entre el uno y el otro es básicamente que:</p>
<ul>
<li>Cuando una variable es pasada por valor, el método recibe una copia del valor de la variable. Por lo tanto, los cambios realizados a esa variable dentro del contexto de la función, NO afecta a la variable original. Pero&#8230;</li>
<li>Cuando es pasada por referencia, el método recibe la referencia a la variable original. Por tanto los cambios realizados a esa variable dentro del contexto de la función, AFECTA a la variable original.</li>
</ul>
<h3>¿Cual debo usar?</h3>
<p>Eso depende de lo que quieras hacer. Cada una tiene sus ventajas y desventajas. Al pasar una variable por valor, estás asegurando que dicho valor no va a ser modificado por equivocación. Por otro lado, al pasar una variable por referencia, aunque la variable puede ser modificada por equivocación, ahorramos tiempo de ejecución y memoria, puesto que no es necesario crear una copia de la variable.</p>
<h3>Pasar variables por referencia</h3>
<p>Todas las variables que pasamos a un método declarado normalmente, <strong>son por valor</strong>. Para pasar argumentos por referencia es necesario utilizar las palabras reservada <em><strong>ref</strong></em> o <em><strong>out</strong></em>, tanto al declarar el método como al invocarlo. Cuando pasamos un argumento usando ref, es necesario que dicha variable esté ya inicializada, de lo contrario obtendremos una excepción. Si la variable que deseamos pasar por referencia no está inicializada, es nesesario usar <em><strong>out</strong></em>, de tal manera que podamos inicializar la variable dentro del contexto del método.</p>
<h3>Ejemplo&#8230;</h3>
<p>En el siguiente ejemplo tenemos dos variables (<em>y</em> Y <em>z</em>), las cuales son procesadas por métodos que reciben variables por valor y por referencia. El resultado y el código son:</p>
<p style="text-align: center;"><a href="http://casidiablo.net/wordpress/wp-content/uploads/2008/07/pantallazo-valor-vs-referencia.png"><img class="size-medium wp-image-969 aligncenter" title="pantallazo-valor-vs-referencia" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/07/pantallazo-valor-vs-referencia-300x171.png" alt="" width="300" height="171" /></a></p>
<p><span id="more-967"></span></p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">// Demostración de paso por valor y referencia
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ValorReferencia
{
   public class ValorReferencia : Form
   {
      private Button mostrarSalida;
      private Label etiquetaResultado;
      public ValorReferencia()
      {
         this.mostrarSalida = new Button();
         this.etiquetaResultado = new Label();
         this.SuspendLayout();
         //Boton
         this.mostrarSalida.Location = new Point(105, 8);
         this.mostrarSalida.Name = &quot;mostrarSalida&quot;;
         this.mostrarSalida.Size = new Size(130, 23);
         this.mostrarSalida.TabIndex = 0;
         this.mostrarSalida.Text = &quot;Mostrar salida&quot;;
         this.mostrarSalida.Click += new System.EventHandler(this.mostrarSalida_Click);
         //Label
         this.etiquetaResultado.Location = new Point(10, 40);
         this.etiquetaResultado.Name = &quot;etiquetaResultado&quot;;
         this.etiquetaResultado.Size = new Size(272, 104);
         this.etiquetaResultado.TabIndex = 1;
         this.AutoScaleBaseSize = new Size(5, 13);
         this.ClientSize = new Size(292, 175);
         this.Controls.AddRange(new Control[] {
            this.etiquetaResultado,
            this.mostrarSalida});
         this.Name = &quot;Formulario&quot;;
         this.Text = &quot;Valor vs Referencia&quot;;
         this.ResumeLayout(false);
      }
      static void Main()
      {
         Application.Run(new ValorReferencia());
      }
      // x es pasado por referencia y el metodo modifica
      // el valor original de la variable
      void CuadradoRef( ref int x )
      {
         x = x * x;
      }
      // x es pasado con el parametro out que inicializa y
      // modifica el valor original de la variable
      void CuadradoOut( out int x )
      {
         x = 6;
         x = x * x;
      }
      // x pasado por valor y el metodo NO modifica
      // el valor original de la variable
      void Cuadrado( int x )
      {
         x = x * x;
      }
      private void mostrarSalida_Click(
         object sender, System.EventArgs e )
      {
         int y = 5; // crear nuevo entero e inicializarlo a 5
         int z;     // declarar z, pero no incializarlo
         // mostrar valores originales de 'y' y 'z'
         etiquetaResultado.Text = &quot;Valor original de y: &quot; + y + &quot;\n&quot;;
         etiquetaResultado.Text += &quot;Valor original de z: uninitialized\n\n&quot;;
         // pasar 'y' y 'z' por referencia
         CuadradoRef( ref y );
         CuadradoOut( out z );
         // mostrar valores de 'y' y 'z' despues
        // de ser modificados por CuadradoRef y CuadradoOut
         etiquetaResultado.Text += &quot;Valor de y despues de CuadradoRef: &quot; + y + &amp;amp;amp;amp;amp;uot;\n&quot;;
         etiquetaResultado.Text += &quot;Valor de z despues de CuadradoOut: &quot; + z + &quot;\n\&quot;;
         // pasar y y z por valor
         Cuadrado( y );
         Cuadrado( z );
         // mostrar que los valores no han cambiado
         etiquetaResultado.Text += &quot;Valor de y despues de Cuadrado: &quot; + y + &amp;amp;amp;amp;amp;uot;\n&quot;;
         etiquetaResultado.Text += &quot;Valor de z despues de Cuadrado: &quot; + z + &quot;\n&quot;;
      } // end method mostrarSalida_Click
   }
}</pre>
<p><!--INFOLINKS_ON--></p>
<h3>Descargar</h3>
<ul>
<li><a class="tooltip" title="En español" href="http://casidiablo.net/descargar/Valor+vs+Referencia+%28S+Sharp%29">Código fuente simplificado</a></li>
<li><a class="tooltip" title="En ingleś" href="http://casidiablo.net/descargar/RefOutTest">Código fuente original</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/funciones-referencia-valor-c-sharp/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>WinForms 2.0 para Mono</title>
		<link>http://casidiablo.net/winforms-20-para-mono/</link>
		<comments>http://casidiablo.net/winforms-20-para-mono/#comments</comments>
		<pubDate>Wed, 14 May 2008 18:38:59 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[mono]]></category>

		<guid isPermaLink="false">http://www.casidiablo.net/wordpress/index.php/2008/05/14/winforms-20-para-mono/</guid>
		<description><![CDATA[Me entero en Barrapunto que el desarrollo de WinForms 2.0 para Mono ya se ha completado y que los 12,776 métodos que constituyen su API pública son exactamente los mismos que los de .NET. El toolkit está compuesto por 115.000 líneas de código fuente y ha costado 4 años de desarrollo (desde el 8 de [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fwinforms-20-para-mono%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22WinForms%202.0%20para%20Mono%22%20%7D);"></div>
<p>Me entero en Barrapunto que <em><a href="http://tirania.org/blog/archive/2008/May-13.html">el desarrollo de WinForms 2.0 para Mono ya se ha completado</a> y que los 12,776 métodos que constituyen su API pública son exactamente los mismos que los de .NET. El </em><em>toolkit está compuesto por 115.000 líneas de código fuente y ha costado 4 años de desarrollo (desde el 8 de julio de 2004). Actualmente están soportados los </em><em>backends para X11, OSX y Win32. WinForms 2.0 era la última pieza del puzzle que había que completar antes de la publicación de Mono 2.0.</em></p>
<p>Sin duda una excelente noticia para el mundo del software libre, y para la gente que está pensando en migrar las aplicaciones que usen WindowsForms a entornos libres.</p>
<p><strong>Relacionadas:</strong></p>
<ul>
<li><a href="http://www.casidiablo.net/wordpress/index.php/2008/05/05/aplicaciones-con-gui-en-net-%c2%bfgtk-o-windows-forms/"> Aplicaciones con GUI en .NET: ¿Gtk# o Windows Forms?		</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/winforms-20-para-mono/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Aplicaciones con GUI en .NET: ¿Gtk# o Windows Forms?</title>
		<link>http://casidiablo.net/aplicaciones-con-gui-en-net-%c2%bfgtk-o-windows-forms/</link>
		<comments>http://casidiablo.net/aplicaciones-con-gui-en-net-%c2%bfgtk-o-windows-forms/#comments</comments>
		<pubDate>Mon, 05 May 2008 20:03:51 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[artículos]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[monodevelop]]></category>

		<guid isPermaLink="false">http://www.casidiablo.net/wordpress/index.php/2008/05/05/aplicaciones-con-gui-en-net-%c2%bfgtk-o-windows-forms/</guid>
		<description><![CDATA[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#. [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Faplicaciones-con-gui-en-net-%2525c2%2525bfgtk-o-windows-forms%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Aplicaciones%20con%20GUI%20en%20.NET%3A%20%C2%BFGtk%23%20o%20Windows%20Forms%3F%22%20%7D);"></div>
<p><img border="0" width="600" src="http://i270.photobucket.com/albums/jj96/Casidiablo/gtk-mono.png" height="455" /></p>
<p>Hace tiempo discutía con algunas personas la <em>mejor manera de usar Mono</em> tanto en el escritorio <a href="http://www.casidiablo.net/wordpress/index.php/category/linux/">Linux</a> como en Windows. Me refiero al momento de escoger entre <a href="http://en.wikipedia.org/wiki/Windows_Forms" title="Read at the Wikipedia ;)">Windows Forms</a> y <a href="http://en.wikipedia.org/wiki/Gtk_Sharp" title="Read at the Wikipedia ;)">Gtk#</a>, para desarrollar aplicaciones con interfaz gráfica. Personalmente pienso que <strong>la mejor opción es, inclinándome hacia el lado del <a href="http://www.casidiablo.net/wordpress/index.php/category/software-libre/">software libre</a>, usar <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/acerca-de-mono/">Mono</a> + <a href="http://en.wikipedia.org/wiki/Gtk_Sharp" title="Read at the Wikipedia ;)">Gtk#</a></strong>. Claro, eso también depende de tus gustos como desarrollador y, más importante aún, de las necesidades del proyecto a realizar.</p>
<p>Lo que quiero enseñarles en esta entrada es <em>cómo se pueden tomar diferentes caminos</em>, y aclarar algunas dudas que me han planteado ciertos lectores. Siendo así, vamos a tomar como ejemplo a dos programas sencillos: el primero usando <a href="http://en.wikipedia.org/wiki/Gtk_Sharp" title="Read at the Wikipedia ;)">Gtk#</a> y corriendo tanto en <a href="http://www.casidiablo.net/wordpress/index.php/category/linux/">Linux</a> como Windows, y el otro usando <a href="http://en.wikipedia.org/wiki/Windows_Forms" title="Read at the Wikipedia ;)">Windows Forms</a> corriendo tanto en Windows como <a href="http://www.casidiablo.net/wordpress/index.php/category/linux/">Linux</a>.</p>
<h3>Desarrollando y ejecutando aplicaciones Gtk# y Windows Forms usando Mono</h3>
<p>Antes de comenzar con los ejercicios, veamos qué necesitamos para desarrollar y ejecutar aplicaciones que usen <a href="http://en.wikipedia.org/wiki/Gtk_Sharp" title="Read at the Wikipedia ;)">Gtk#</a> y <a href="http://en.wikipedia.org/wiki/Windows_Forms" title="Read at the Wikipedia ;)">Windows Forms</a>. 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 <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/acerca-de-mono/">Mono</a> (como <a href="http://www.gnome.org/projects/tomboy/">Tomboy</a>, <a href="http://f-spot.org/Main_Page">Fspot</a> o <a href="http://banshee-project.org/Main_Page">Banshee</a>). <em>Para compilar aplicaciones C# para mono es necesario utilizar el <a href="http://www.mono-project.com/CSharp_Compiler">CSharp Compiler</a> (<code>cms</code>)</em>.</p>
<p>También, es posible <a href="http://www.go-mono.com/mono-downloads/download.html">descargar mono</a> para los más importantes sistemas operativos, incluyendo por supuesto sistemas Microsoft Windows. Para tal caso es posible descargar una versión completa (<a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/acerca-de-mono/">Mono</a> + <a href="http://en.wikipedia.org/wiki/Gtk_Sharp" title="Read at the Wikipedia ;)">Gtk#</a> + XSP), o tan solo el intérprete + <a href="http://en.wikipedia.org/wiki/Gtk_Sharp" title="Read at the Wikipedia ;)">Gtk#</a> para un <em>Framework .NET</em> ya instalado sobre el ordenador.</p>
<h3>Código del programa que usa Gtk#</h3>
<p><span id="more-890"></span><br />
//Ejemplo GTK (EjemploGtk.cs)<br />
using Gtk;<br />
using System;<br />
class EjemploGtk {<br />
	static void Main()<br />
	{<br />
		Application.Init ();<br />
		//Crear el boton<br />
		Button btn = new Button (&#8220;Hola monito!&#8221;);<br />
		//Asignar un evento al evento Clic del boton<br />
		btn.Clicked += new EventHandler (hola);<br />
		//Crear el objeto ventana<br />
		Window ventana = new Window (&#8220;Lindo primate!&#8221;);<br />
		//Asignar un metodo al evento Cerrar ventan<br />
		ventana.DeleteEvent += new DeleteEventHandler (cerrar_ventana);<br />
		//Asigna el ancho y alto de la ventana<br />
		ventana.DefaultWidth = 200;<br />
        ventana.DefaultHeight = 60;<br />
		//Anyadir el boton a la ventana<br />
		ventana.Add (btn);<br />
		//Mostrar la ventana<br />
		ventana.ShowAll ();<br />
		//Ejecutar la aplicacion<br />
		Application.Run ();<br />
	}<br />
	static void cerrar_ventana (object obj, DeleteEventArgs args)<br />
	{<br />
		Application.Quit ();<br />
	}<br />
	static void hola (object obj, EventArgs args)<br />
	{<br />
		Console.WriteLine(&#8220;Lindo monito!&#8221;);<br />
		Application.Quit ();<br />
	}<br />
}</p>
<p>Para compilarlo y ejecutarlo puedes usar los siguientes comandos:</p>
<p class="consola">mcs -pkg:gtk-sharp-2.0 EjemploGtk.cs<br />
mono EjemploGtk.exe</p>
<p>El resultado es el mismo tanto en Linux como en Windows:</p>
<p style="text-align: center"><img width="259" src="http://i270.photobucket.com/albums/jj96/Casidiablo/gtk-linux.png" alt="gtk sobre linux" height="91" title="gtk sobre linux" /> <img width="208" src="http://i270.photobucket.com/albums/jj96/Casidiablo/gtk-win.png" alt="gtk-sharp sobre windows" height="94" title="gtk-sharp sobre windows" /></p>
<h3>Código del programa que usa Windows Forms</h3>
<p>Este programa hace exactamente lo mismo que el anterior, pero esta vez usando Windows Forms para la interfaz gráfica:</p>
<p>//Ejemplo Windows Forms (EjemploWinForms.cs)<br />
using System.Drawing;<br />
using System.Windows.Forms;<br />
using System;<br />
class EjemploWinForms : Form{<br />
	static void Main(){<br />
		Application.Run(new EjemploWinForms());<br />
	}<br />
	public EjemploWinForms() {<br />
		//Crear e iniciar el boton, y sus propiedades<br />
		Button boton = new Button();<br />
		boton.Location = new Point(0, -1);<br />
		boton.Name = &#8220;boton&#8221;;<br />
		boton.Size = new System.Drawing.Size(193, 60);<br />
		boton.TabIndex = 0;<br />
		boton.Text = &#8220;Botoncito&#8221;;<br />
		//Asignar un evento al evento Clic del boton<br />
		boton.Click += new System.EventHandler(hola);<br />
		//Indicar el tamanyo de la ventana<br />
		ClientSize = new System.Drawing.Size(193, 60);<br />
		//Anyadir el boton<br />
		Controls.Add(boton);<br />
		Text = &#8220;Ventanita&#8221;;<br />
		ResumeLayout(false);<br />
	}<br />
	private void hola(object sender, EventArgs e) {<br />
		Console.WriteLine(&#8220;Un mensajito!&#8221;);<br />
		Close ();<br />
	}<br />
}</p>
<p>Para compilarlo y ejecutarlo puedes usar los siguientes comandos:</p>
<p class="consola">mcs -r:System.Drawing.dll,System.Windows.Forms.dll EjemploWinForms.cs<br />
mono EjemploWindowsForms.exe</p>
<p>El resultado es el mismo tanto en Linux como en Windows:</p>
<p style="text-align: center"><img width="199" src="http://i270.photobucket.com/albums/jj96/Casidiablo/winforms-linux.png" alt="windows forms sobre linux" height="92" title="windows forms sobre linux" /> <img width="208" src="http://i270.photobucket.com/albums/jj96/Casidiablo/winforms-win.png" alt="windows forms sobre windows" height="94" title="windows forms sobre windows" /></p>
<h3>Consideraciones a tener en cuenta</h3>
<p>Al momento de desarrollar aplicaciones con GUIs en C# de manera rápida, tenemos basicamente dos opciones:</p>
<ul>
<li>Podemos <strong>usar Monodevelop que incluye un editor de interfaces gráficas</strong> basado en Stetic y que por supuesto desarrolla dichas interfaces bajo <a href="http://en.wikipedia.org/wiki/Gtk_Sharp" title="Read at the Wikipedia ;)">Gtk#</a>.</li>
<li>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.</li>
</ul>
<p>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.</p>
<h3>Enlaces interesantes</h3>
<ul>
<li><a href="http://www.mono-project.com/">Página oficial del proyecto Mono</a></li>
<li><a href="http://www.monodevelop.com/">Página oficial de Monodevelop</a></li>
<li><a href="http://http://www.casidiablo.net/wordpress/index.php/c-y-net/">Ejemplos de programación C#</a></li>
</ul>
<p><a href="http://www.casidiablo.net/codigos/C_Sharp/Ejemplos_Gtk_WinForms_Mono.zip" title="Descargar código fuente!" class="descargacodigo">Descargar código fuente de los ejemplos</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/aplicaciones-con-gui-en-net-%c2%bfgtk-o-windows-forms/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Publicada la versión 1.0 de MonoDevelop</title>
		<link>http://casidiablo.net/publicada-la-version-10-de-monodevelop/</link>
		<comments>http://casidiablo.net/publicada-la-version-10-de-monodevelop/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 20:33:39 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[monodevelop]]></category>

		<guid isPermaLink="false">http://www.casidiablo.net/wordpress/index.php/2008/03/17/publicada-la-version-10-de-monodevelop/</guid>
		<description><![CDATA[El equipo de desarrollo de MonoDevelop ha liberado la versión 1.0 de este IDE para Mono, un implementación libre de .NET para plataformas Linux y MacOSX. Sin duda una buena noticia para los usuarios de esta plataforma, y en general para la comunidad de software libre. Anuncio &#124;  Ver las características de este IDE]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fpublicada-la-version-10-de-monodevelop%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Publicada%20la%20versi%C3%B3n%201.0%20de%20MonoDevelop%22%20%7D);"></div>
<p align="center"><img src="http://img204.imageshack.us/img204/4452/logomonodevelopii6.png" /></p>
<p>El equipo de desarrollo de <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/16/caracteristicas-monodevelop/">MonoDevelop</a> ha liberado la versión 1.0 de este IDE para <a href="http://www.casidiablo.net/wordpress/index.php/category/programacion/net/mono/">Mono</a>, un implementación libre de .NET para plataformas Linux y MacOSX. Sin duda una buena noticia para los usuarios de esta plataforma, y en general para la comunidad de software libre.</p>
<p><a href="http://lists.ximian.com/pipermail/monodevelop-list/2008-March/007517.html">Anuncio</a> |  <a href="http://www.monodevelop.com/MonoDevelop_1.0_Released">Ver las características de este IDE</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/publicada-la-version-10-de-monodevelop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[código] Ejemplo básico de métodos en C Sharp</title>
		<link>http://casidiablo.net/codigo-ejemplo-funciones-c-sharp/</link>
		<comments>http://casidiablo.net/codigo-ejemplo-funciones-c-sharp/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 21:54:27 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[hack]]></category>

		<guid isPermaLink="false">http://www.casidiablo.net/wordpress/index.php/2007/12/17/codigo-ejemplo-funciones-c-sharp/</guid>
		<description><![CDATA[Demostración de un metodo definido por el usuario para elevar al cuadrado un número Lo que es interesante aquí, es ver como la aplicación corre de igual forma tanto en Windows como en Gnu/Linux: Código fuente: // Demostracion de un metodo definido por el usuario para elevar al cuadrado un numero. using System; using System.Windows.Forms; [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fcodigo-ejemplo-funciones-c-sharp%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%5Bc%C3%B3digo%5D%20Ejemplo%20b%C3%A1sico%20de%20m%C3%A9todos%20en%20C%20Sharp%22%20%7D);"></div>
<h3>Demostración de un metodo definido por el usuario para elevar al cuadrado un número</h3>
<p>Lo que es interesante aquí, es ver como la aplicación corre de igual forma tanto en Windows como en Gnu/Linux:</p>
<p style="text-align: center"><img src="http://img230.imageshack.us/img230/8959/winrk5.png" alt="corriendo en windows" width="219" height="235" /> <img src="http://img89.imageshack.us/img89/1372/linuxag0.png" alt="corriendo en linux" width="232" height="233" /></p>
<p><strong>Código fuente:</strong><br />
<span id="more-767"></span><br />
<!--INFOLINKS_OFF-->
<pre class="brush: csharp;">// Demostracion de un metodo definido por el usuario para elevar al cuadrado un numero.
using System;
using System.Windows.Forms;
namespace ElevarCuadrado
{
    public class Ventana : Form
    {
        private Button botonCalcular;
        private Label labelSalida;

        public Ventana()
        {
            InitializeComponent();
        }

        private void InitializeComponent()
        {
            this.botonCalcular = new Button();
            this.labelSalida = new Label();
            this.SuspendLayout();
            //
            // botonCalcular
            //
            this.botonCalcular.Location = new System.Drawing.Point(32, 8);
            this.botonCalcular.Name = &quot;botonCalcular&quot;;
            this.botonCalcular.Size = new System.Drawing.Size(120, 23);
            this.botonCalcular.TabIndex = 0;
            this.botonCalcular.Text = &quot;Calcular Cuadrados&quot;;
            this.botonCalcular.Click += new System.EventHandler(this.botonCalcular_Click);
            //
            // labelSalida
            //
            this.labelSalida.Location = new System.Drawing.Point(16, 48);
            this.labelSalida.Name = &quot;labelSalida&quot;;
            this.labelSalida.Size = new System.Drawing.Size(152, 144);
            this.labelSalida.TabIndex = 1;
            //
            // Ventana
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(189, 201);
            this.Controls.Add(this.labelSalida);
            this.Controls.Add(this.botonCalcular);
            this.Name = &quot;Ventana&quot;;
            this.Text = &quot;Elevar al cuadrado&quot;;
            this.ResumeLayout(false);

        }

        [STAThread]
        static void Main()
        {
            Application.Run(new Ventana());
        }

        // Definicion del metodo ElevarCuadrado
        int ElevarCuadrado(int y)
        {
            return y * y; // retornar cuadrado de y

        } // fin del metodo ElevarCuadrado

        private void botonCalcular_Click(object sender, System.EventArgs e)
        {
            labelSalida.Text = &quot;&quot;;

            // repetir diez veces
            for (int contador = 1; contador &lt;= 10; contador++)
            {
                // calcular cuadrado de contador y guardar en resultado
                int resultado = ElevarCuadrado(contador);

                // añadir resulatdo a labelSalida
                labelSalida.Text += &quot;El cuadrado de &quot; + contador +
                   &quot; es &quot; + resultado + &quot;\n&quot;;
            }

        } // fin del metodo botonCalcular_Click

    } // fin de la clase
}</pre>
<p><!--INFOLINKS_ON--><br />
<a class="descargacodigo" title="Descargar proyecto!" href="http://casidiablo.net/descargar/Elevar+al+Cuadrado">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/codigo-ejemplo-funciones-c-sharp/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Breve introducción al MonoDevelop</title>
		<link>http://casidiablo.net/caracteristicas-monodevelop/</link>
		<comments>http://casidiablo.net/caracteristicas-monodevelop/#comments</comments>
		<pubDate>Sun, 16 Dec 2007 16:31:12 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[programas]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[monodevelop]]></category>
		<category><![CDATA[opensuse]]></category>

		<guid isPermaLink="false">http://www.casidiablo.net/wordpress/index.php/2007/12/16/caracteristicas-monodevelop/</guid>
		<description><![CDATA[Desarrollo de aplicaciones .NET usando el Entorno de Desarrollo Integrado: MonoDevelop Continuando con el tema del desarrollo de aplicaciones en la plataforma .NET, específicamente usando el lenguaje de programación C#, les mostraré un ejemplo del uso de MonoDevelop, un IDE de programación especial para trabajar con la plataforma libre .NET: Mono. La idea de este [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fcaracteristicas-monodevelop%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Breve%20introducci%C3%B3n%20al%20MonoDevelop%22%20%7D);"></div>
<h3>Desarrollo de aplicaciones .NET usando el Entorno de Desarrollo Integrado: MonoDevelop</h3>
<p style="text-align: center"><img border="0" width="265" src="http://img204.imageshack.us/img204/4452/logomonodevelopii6.png" alt="monodevelop" height="50" /></p>
<p>Continuando con el tema del <a href="http://www.casidiablo.net/wordpress/index.php/c-y-net/">desarrollo de aplicaciones en la plataforma .NET</a>, específicamente usando el lenguaje de programación C#, les mostraré un ejemplo del uso de <a href="http://www.monodevelop.com/Main_Page">MonoDevelop</a>, un IDE de programación especial para trabajar con la <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/acerca-de-mono/">plataforma libre .NET: Mono</a>.</p>
<p>La idea de este documento es mostrar algunas características importantes para el desarrollo de aplicaciones usando este IDE de programación, para lo cual vamos a crear paso a paso una aplicación muy bí¡sica, en donde aprenderemos a implementar clases y a referenciar librerías.</p>
<p>Lo primero es <a href="http://www.monodevelop.com/Download">descargar el MonoDevelop</a>. Puedes descargar las fuentes y compilarlas tu mismo, o buscar algún paquete para tu distribución (.deb, .rpm, etc.), aunque si no quieres liarte tal vez querrás usar openSuse, que te permite instalarlo desde los CDs de instalación. Una vez instalado, lo ejecutamos y veremos algo como lo siguiente:</p>
<p align="center"><a href="http://img204.imageshack.us/img204/8486/59910022tl5.png" title="Ver grande"><img border="0" width="700" src="http://img204.imageshack.us/img204/8486/59910022tl5.png"/></a></p>
<p>Como puedes ver su interfaz es limpia y <span id="more-765"></span>agradable, y si ya has usado cualquier otro IDE te resultará bastante fácil acostumbrarte a éste. Ahora, vamos a crear un nuevo proyecto: &#8220;<em>Archivo</em> &gt;&gt; <em>Nuevo Proyecto</em>&#8220;. En esta parte debemos seleccionar el tipo de proyecto a desarrollar (en este caso va a ser un Proyecto vacío de <a href="http://www.casidiablo.net/wordpress/index.php/c-y-net/">C#</a>), su nombre, la ubicación donde lo guardaremos, etc.:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/8724/45665579ok5.png"/></p>
<p>Le damos clic en <em>Adelante</em>, y luego en <em>Finalizar</em> (en esta parte habrá aparecido algunas otras opciones avanzadas que no trataremos en este documento). Ahora vamos a crear un nuevo archivo: Clic derecho en la raíz de la solución, <em>Añadir</em> &gt;&gt; <em>Nuevo archivo&#8230;</em>:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/5922/70750587xi4.png"/></p>
<p>En este punto podemos escoger varios tipos de archivo, pero para este ejemplo seleccionamos <em>General</em>, luego <em>Clase vacía</em> y digitamos el nombre de nuestra nueva clase:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/5420/58907434hk7.png"/></p>
<p>MonoDevelop creará el archivo y escribirá una estructura base para la aplicación (importar el namespace <em>System</em>, crear nuestro namespace, crear la clase, crear el constructor). Ahora ya podemos comenzar a editar nuestra clase:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/6559/53116020px0.png"/></p>
<p>Nuestro clase tendrá, al principio, lo siguiente:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">// Ejemplo.cs creado con MonoDevelop
// Usuario: casidiablo a las 14:48 de la fecha 15/12/2007
//

using System;

namespace EjemploMono
{
    public class Ejemplo
    {

        public Ejemplo()
        {
            Console.WriteLine(&quot;Este es el constructor&quot;);
        }
        static void Main(string[] args)
        {
            new Ejemplo();
        }
    }
}</pre>
<p><!--INFOLINKS_ON--></p>
<p>Vamos entonces a ver algunas características interesantes que nos ofrece MonoDevelop al codificar nuestras clases:</p>
<p><strong>Auto-completamiento de código en clases del estándar:</strong></p>
<p>Luego de escribir una clase, en este caso la clase Console, al teclear la tecla punto (para llamar a alguna función de esa clase) se desplegará un menú donde aparecerá la lista de los métodos de la clase:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/5641/50169344xe5.png"/></p>
<p><strong>Compilando el código</strong></p>
<p>Para compilar nuestro proyecto: <em>Proyecto</em> &gt;&gt; <em>Construir</em> solución o presionamos <em>F8</em>, con lo cual podremos probar y depurar nuestra solución:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/2271/89252537oh0.png"/></p>
<p>En la parte de abajo podremos ver información acerca de la compilación del archivo:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/9734/56333383fv8.png"/></p>
<p>Si por ejemplo tenemos un error en el código fuente, veremos algo como lo siguiente:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/9186/92066735hl8.png"/></p>
<p><strong>Ejecutar nuestra aplicación</strong></p>
<p>Para probar nuestro proyecto: <em>Proyecto</em> &gt;&gt; <em>Ejecutar</em> o presionamos <em>F5</em>, con lo cual podremos ejecutar nuestra solución:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/7184/10oc2.png"/></p>
<p><strong>¡ Ahora usemos el API de Windows Forms para mostrar un cuadro de dialogo !</strong></p>
<p>Vamos a modificar nuestra aplicación para usar el API de Windows Forms, con la cual podremos crear aplicaciones con interfaces gráficas que podrán correr sin ningún problema sobre plataformas Windows.</p>
<p>Lo primero es añadir la referencia a las librerías de <strong>Windows Forms</strong> (<em>System.Windows.Forms</em>), para lo cual le damos clic derecho en la carpeta <em>Referencias</em> en el visor de la solución y luego clic en <em>Editar referencias&#8230;</em>:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/1882/11vf3.png"/></p>
<p>Seleccionamos el paquete <em>System.Windows.Forms</em> y damos clic en <em>Aceptar</em>:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/4874/12mt2.png"/></p>
<p>Debemos usar el namespace <em>System.Windows.Forms</em>, y podemos darnos cuenta que, después de referenciar el paquete, al declarar el paquete podemos usar el auto-completamiento de código:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/7020/13yh2.png"/></p>
<p>Además, el auto-completamiento de código lo podemos usar para ver lo métodos de una determinada clase, y los parámetros que debemos enviarle. Por ejemplo, vamos a crear un método llamado <em>mostrarMensaje()</em>, en donde usaremos la clase <em>MessageBox</em> para mostrar un cuadro de dialogo. Fijémonos cómo MonoDevelop nos indica los parámetros que debemos pasarle al método <em>Show()</em>:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/2778/14ga9.png"/></p>
<p>MonoDevelop no solo te ayuda auto-completando los métodos de librerías ajenas, sino que nos proporciona esta útil funcionalidad en nuestros propios métodos:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/6788/15xx5.png"/></p>
<p>Al final nuestro código tendrá el siguiente contenido:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">// Ejemplo.cs creado con MonoDevelop
// Usuario: casidiablo a las 14:48 de la fecha 15/12/2007
//

using System;
using System.Windows.Forms;

namespace EjemploMono
{
    public class Ejemplo
    {

        public Ejemplo()
        {
            Console.WriteLine(&quot;Este es el constructor&quot;);
        }
        public void mostrarMensaje()
        {
            MessageBox.Show(&quot;Este es el texto&quot;, &quot;Y este el titulo&quot;);
        }
        static void Main(string[] args)
        {
            new Ejemplo().mostrarMensaje();
        }
    }
}</pre>
<p><!--INFOLINKS_ON--></p>
<p>Al ejecutarlo veremos lo siguiente:</p>
<p align="center"><img border="0" src="http://img204.imageshack.us/img204/3117/16if9.png"/></p>
<p><strong>¿Porqué usar Windows Forms en vez de Gtk? ¿Qué no te gustaba el software libre y tal?</strong></p>
<p>Como programadores, y aunque amemos las filosofías del software libre, tenemos que estar al tanto de todo cuanto nos sea posible, y esto irremediablemente nos &#8220;obliga&#8221; a que aprendamos a desarrollar software para sistemas Microsoft Windows. Desafortunadamente, Microsoft tiene una GRAN cuota en el mercado, y por tanto debemos estar preparados para crear e  implementar aplicaciones compatibles con sus sistemas operativos.</p>
<p>Si estás interesado en estos temas, seguro tienes una gran ventaja sobre los desarrolladores de software pro-Microsoft, que solo aprenden lo estrictamente necesario. Usando herramientas como Mono, no solo eres LIBRE sino que tienes un panorama muchísimo más amplio para el desarrollo de soluciones de software. No desaproveches la oportunidad.</p>
<p>Un saludo!</p>
<p><strong>Descagas:</strong></p>
<ul>
<li><a href="http://casidiablo.net/descargar/Mono+Develop">Descargar este artículo en formato PDF</a></li>
<li><a href="http://casidiablo.net/descargar/Mono+Develop+Versi%C3%B3n+Editable">Descargar este artículo en formato ODT, para que puedas editarlo</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/caracteristicas-monodevelop/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>[código] C#, instrucciones de control</title>
		<link>http://casidiablo.net/codigo-c-sharp-instrucciones-control/</link>
		<comments>http://casidiablo.net/codigo-c-sharp-instrucciones-control/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 20:30:12 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[hack]]></category>

		<guid isPermaLink="false">http://www.casidiablo.net/wordpress/index.php/2007/12/10/codigo-c-sharp-instrucciones-control/</guid>
		<description><![CDATA[Ya tratabamos antes la instrucción if y while en C#&#8230; ahora vamos a tratar más instrucciones de control. Los programas corren tanto en plataformas Microsoft usando Visual Studio, como en cualquier otra plataforma usando Mono. Tal vez quieras visitar leer estas entradas: Cómo crear aplicaciones en C# usando Visual Studio o C#, crear una aplicación [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fcodigo-c-sharp-instrucciones-control%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%5Bc%C3%B3digo%5D%20C%23%2C%20instrucciones%20de%20control%22%20%7D);"></div>
<p>Ya tratabamos antes la <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/codigo-c-sharp-programas-basicos-2/">instrucción if y while en C#</a>&#8230; ahora vamos a tratar más instrucciones de control. Los programas corren tanto en plataformas Microsoft usando Visual Studio, como en cualquier otra plataforma usando <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/acerca-de-mono/">Mono</a>. Tal vez quieras visitar leer estas entradas: <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/c-crear-una-aplicacion-usando-visual-studio/" title="Leer entrada">Cómo crear aplicaciones en C# usando Visual Studio</a> o <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/c-crear-una-aplicacion-usando-mono-referenciando-windowsforms/" title="Leer entrada">C#, crear una aplicación usando Mono</a>.Tal como pueden apreciar, los en ejemplos se muestra cómo compilar y ejecutar con Mono, pero si lo que quieres es hacerlo con Visual Studio, no te preocupes, <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/c-crear-una-aplicacion-usando-visual-studio/">aquí</a> te explico como se hace.</p>
<p><strong>Repeticion controlada por contador usando While</strong><br />
<!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class ContadorWhile
{
	static void Main( string[] args )
	{
		int contador = 1;          // initialización
		while ( contador &lt;= 5 )    // repetición condition
		{
			Console.WriteLine( contador );
			contador++;             // incremento
		} // end while
	} // fin del método Main
} // fin de la clase ContadorWhile</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs ContadorWhile.cs<br />
casidiablo@punko:~/c#> mono ContadorWhile.exe<br />
1<br />
2<br />
3<br />
4<br />
5</p>
<p><a href="http://casidiablo.net/descargar/Contador+While" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<p><strong>Repetición controlada por contador usando la estructura for</strong><br />
<!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class ContadorFor
{
   static void Main( string[] args )
   {
      // inicialización ; condición de repetición ; incremento
      for ( int contador = 1; contador &lt;= 5; contador++ )
         Console.WriteLine( contador );
   }
}</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs ContadorFor.cs<br />
casidiablo@punko:~/c#> mono ContadorFor.exe<br />
1<br />
2<br />
3<br />
4<br />
5</p>
<p><a href="http://casidiablo.net/descargar/Contador+For" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<p><strong>Sumatoria usando la estructura for</strong><br />
<!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
using System.Windows.Forms;
class SumaDialogo
{
	static void Main( string[] args )
	{
		int suma = 0;
		for ( int numero = 2; numero &lt;= 100; numero += 2 )
			suma += numero;
		MessageBox.Show( &quot;La suma es &quot; + suma,
				 &quot;Sumando cada entero desde 2 hasta 100&quot;,
				 MessageBoxButtons.OK,
				 MessageBoxIcon.Information );
	} // fin del método Main
} // fin de la clase SumaDialogo</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs -reference:/usr/lib/mono/1.0/System.Windows.Forms.dll SumaDialogo.cs<br />
casidiablo@punko:~/c#> mono SumaDialogo.exe</p>
<p style="text-align: center"><img src="http://img45.imageshack.us/img45/5337/sumadialogouj3.png" alt="c# mono" height="129" width="327" /></p>
<p><a href="http://casidiablo.net/descargar/Suma+dialogo" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<p><strong>Calculando el incremento del interés usando el for</strong><br />
<!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
using System.Windows.Forms;
class Interes
{
	static void Main( string[] args )
	{
		decimal cantidad, principal = ( decimal ) 1000.00;
		double porcentaje = .05;
		string salida;
		salida = &quot;Año       Cantidad del Depósito\n&quot;;
		for ( int anio = 1; anio &lt;= 10; anio++ )
		{
			cantidad = principal *
					( decimal ) Math.Pow( 1.0 + porcentaje, anio );
			salida += anio + &quot;             &quot; +
					String.Format( &quot;{0:C}&quot;, cantidad ) + &quot;\n&quot;;
		}
		MessageBox.Show( salida, &quot;Aumento del Interes&quot;,
				 MessageBoxButtons.OK, MessageBoxIcon.Information );
	} // fin del método Main
} // fin de la clase Interes</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs -reference:/usr/lib/mono/1.0/System.Windows.Forms.dll Interes.cs<br />
casidiablo@punko:~/c#> mono Interes.exe</p>
<p style="text-align: center"><img src="http://img220.imageshack.us/img220/4144/intereskj8.png" alt="c# mono" height="199" width="239" /></p>
<p><a href="http://casidiablo.net/descargar/C+Sharp+Interes" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<p><strong>Uso de la sentecia switc: Contando letras</strong><br />
<!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class TestSwitch
{
	static void Main( string[] args )
	{
		char letra;      // una letra
		int aContador = 0, // numero de As
		bContador = 0, // numero de Bs
		cContador = 0, // numero de Cs
		dContador = 0,  // numero de Ds
		fContador = 0;  // numero de Fs
		for ( int i = 1; i &lt;= 10; i++ )
		{
			Console.Write( &quot;Enter a letter letra: &quot; );
			letra = Char.Parse( Console.ReadLine() );
			switch ( letra )
			{
				case 'A':   // letra está en mayúscula A
				case 'a':   // o minÃ­scula a
					++aContador;
					break;
				case 'B':   // letra está en mayúscula B
				case 'b':   // o minÃ­scula b
					++bContador;
					break;
				case 'C':   // letra está en mayúscula C
				case 'c':   // o minÃ­scula c
					++cContador;
					break;
				case 'D':   // letra está en mayúscula D
				case 'd':   // o minÃ­scula d
					++dContador;
					break;
				case 'F':   // letra está en mayúscula F
				case 'f':   // o minÃ­scula f
					++fContador;
					break;
				default:    // processes all other characters
					Console.WriteLine(
							&quot;Ha digitado una letra incorrecta.&quot; +
							&quot;\nDigite una nueva letra&quot; );
					break;
			} // fin switch
		} // fin for
		Console.WriteLine(
				&quot;\nLos totales para cada letra son:\nA: {0}&quot; +
				&quot;\nB: {1}\nC: {2}\nD: {3}\nF: {4}&quot;, aContador, bContador,
		cContador, dContador, fContador );
	} // fin del metodo Main
} // fin de la clase TestSwitch</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs TestSwitch.cs<br />
casidiablo@punko:~/c#> mono TestSwitch.exe<br />
Enter a letter letra: a<br />
Enter a letter letra: b<br />
Enter a letter letra: a<br />
Enter a letter letra: f<br />
Enter a letter letra: c<br />
Enter a letter letra: e<br />
Ha digitado una letra incorrecta.<br />
Digite una nueva letra<br />
Enter a letter letra: A<br />
Enter a letter letra: B<br />
Enter a letter letra: c<br />
Enter a letter letra: d<br/><br />
Los totales para cada letra son:<br />
A: 3<br />
B: 2<br />
C: 2<br />
D: 1<br />
F: 1</p>
<p><a href="http://casidiablo.net/descargar/C+Sharp+Test+Swithc" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<p><strong>La estructura de repetición do/while</strong><br />
<!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class PruebaDoWhile
{
	static void Main( string[] args )
	{
		int contador = 1;
		do
		{
			Console.WriteLine( contador );
			contador++;
		} while ( contador &lt;= 5 );
	} // fin del método Main
} // fin de la clase PruebaDoWhile</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs PruebaDoWhile.cs<br />
casidiablo@punko:~/c#> mono PruebaDoWhile.exe<br />
1<br />
2<br />
3<br />
4<br />
5</p>
<p><a href="http://casidiablo.net/descargar/C+Sharp+Do+While" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<p><strong>Usando la sentencia break para romper un for</strong><br />
<!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
using System.Windows.Forms;
class PruebaBreak
{
	static void Main( string[] args )
	{
		string salida = &quot;&quot;;
		int contador;
		for ( contador = 1; contador &lt;= 10; contador++ )
		{
			if ( contador == 5 )
				break;           // romper el ciclo si contador == 5
			salida += contador + &quot; &quot;;
		} // fin del ciclo
		salida += &quot;\nSe rompió el ciclo cuando el contador era = &quot; + contador;
		MessageBox.Show( salida, &quot;Demostracion de la sentencia break&quot;,
				 MessageBoxButtons.OK, MessageBoxIcon.Information );
	} // fin del mÃ©todo Main
} // fin de la clase PruebaBreak</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs -reference:/usr/lib/mono/1.0/System.Windows.Forms.dll PruebaBreak.cs<br />
casidiablo@punko:~/c#> mono PruebaBreak.exe</p>
<p style="text-align: center"><img src="http://img225.imageshack.us/img225/5422/pruebabreakjn5.png" /></p>
<p><a href="http://casidiablo.net/descargar/C+Sharp+Prueba+Brake" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<p><strong>Usando la sentencia continue en una estructura for</strong><br />
<!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
using System.Windows.Forms;
class PruebaContinue
{
	static void Main( string[] args )
	{
		string salida = &quot;&quot;;
		for ( int contador = 1; contador &lt;= 10; contador++ )
		{
			if ( contador == 5 )
				continue;       // si contador es 5 saltarse el resto
			salida += contador + &quot; &quot;;
		}
		salida += &quot;\ncontinue usado cuando contador = 5&quot;;
		MessageBox.Show( salida, &quot;Usando la sentencia continue&quot;,
		       MessageBoxButtons.OK, MessageBoxIcon.Information );
   } // fin del método Main
} // fin de la clase PruebaContinue</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs -reference:/usr/lib/mono/1.0/System.Windows.Forms.dll PruebaContinue.cs<br />
casidiablo@punko:~/c#> mono PruebaContinue.exe</p>
<p style="text-align: center"><img src="http://img225.imageshack.us/img225/2041/pruebacontinueho4.png" /></p>
<p><a href="http://casidiablo.net/descargar/C+Sharp+Continue" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<p><strong>Demostracón de los operadores lógicos</strong><br />
<!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class OperadoresLogicos
{
	static void Main( string[] args )
	{
		// probando el operador condicional AND (&amp;amp;amp;&amp;amp;amp;)
		Console.WriteLine( &quot;Condicional AND (&amp;amp;amp;&amp;amp;amp;)&quot; +
				&quot;\nfalse &amp;amp;amp;&amp;amp;amp; false: &quot; + ( false &amp;amp;amp;&amp;amp;amp; false ) +
				&quot;\nfalse &amp;amp;amp;&amp;amp;amp; true: &quot; + ( false &amp;amp;amp;&amp;amp;amp; true ) +
				&quot;\ntrue &amp;amp;amp;&amp;amp;amp; false: &quot; + ( true &amp;amp;amp;&amp;amp;amp; false ) +
				&quot;\ntrue &amp;amp;amp;&amp;amp;amp; true:   &quot; + ( true &amp;amp;amp;&amp;amp;amp; true ) );
		// probando el operador condicional OR (||)
		Console.WriteLine( &quot;\n\nConditional OR (||)&quot; +
				&quot;\nfalse || false: &quot; + ( false || false ) +
				&quot;\nfalse || true: &quot; + ( false || true ) +
				&quot;\ntrue || false: &quot; + ( true || false ) +
				&quot;\ntrue || true:   &quot; + ( true || true ) );
		// probando el operador logico AND (&amp;amp;amp;)
		Console.WriteLine( &quot;\n\nOperador Logico AND (&amp;amp;amp;)&quot; +
				&quot;\nfalse &amp;amp;amp; false: &quot; + ( false &amp;amp;amp; false ) +
				&quot;\nfalse &amp;amp;amp; true: &quot; + ( false &amp;amp;amp; true ) +
				&quot;\ntrue &amp;amp;amp; false: &quot; + ( true &amp;amp;amp; false ) +
				&quot;\ntrue &amp;amp;amp; true:   &quot; + ( true &amp;amp;amp; true ) );
		// probando el operador logico OR (|)
		Console.WriteLine( &quot;\n\nOperador Logico OR (|)&quot; +
				&quot;\nfalse | false: &quot; + ( false | false ) +
				&quot;\nfalse | true: &quot; + ( false | true ) +
				&quot;\ntrue | false: &quot; + ( true | false ) +
				&quot;\ntrue | true:   &quot; + ( true | true ) );
		// probando el operador logico exclusivo OR (^)
		Console.WriteLine( &quot;\n\nLogico exclusivo OR (^)&quot; +
				&quot;\nfalse ^ false: &quot; + ( false ^ false ) +
				&quot;\nfalse ^ true: &quot; + ( false ^ true ) +
				&quot;\ntrue ^ false:  &quot; + ( true ^ false ) +
				&quot;\ntrue ^ true:   &quot; + ( true ^ true ) );
		// probando el operador logico NOT (!)
		Console.WriteLine( &quot;\n\nLogical NOT (!)&quot; +
				&quot;\n!false: &quot; + ( !false ) +
				&quot;\n!true: &quot; + ( !true ) );
	}
}</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs OperadoresLogicos.cs<br />
casidiablo@punko:~/c#> mono OperadoresLogicos.exe<br />
Condicional AND (&#038;&#038;)<br />
false &#038;&#038; false: False<br />
false &#038;&#038; true: False<br />
true &#038;&#038; false: False<br />
true &#038;&#038; true:   True<br/><br/><br />
Conditional OR (||)<br />
false || false: False<br />
false || true: True<br />
true || false: True<br />
true || true:   True<br/><br/><br />
Operador Logico AND (&#038;)<br />
false &#038; false: False<br />
false &#038; true: False<br />
true &#038; false: False<br />
true &#038; true:   True<br/><br/><br />
Operador Logico OR (|)<br />
false | false: False<br />
false | true: True<br />
true | false: True<br />
true | true:   True<br/><br/><br />
Logico exclusivo OR (^)<br />
false ^ false: False<br />
false ^ true: True<br />
true ^ false:  True<br />
true ^ true:   False<br/><br/><br />
Logical NOT (!)<br />
!false: True<br />
!true: False</p>
<p><a href="http://casidiablo.net/descargar/C+Sharp+Operadores+L%C3%B3gicos" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/codigo-c-sharp-instrucciones-control/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[código] C#, programas básicos (2)</title>
		<link>http://casidiablo.net/codigo-c-sharp-programas-basicos-2/</link>
		<comments>http://casidiablo.net/codigo-c-sharp-programas-basicos-2/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 19:54:54 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[ejemplos]]></category>

		<guid isPermaLink="false">http://www.casidiablo.net/wordpress/index.php/2007/12/10/codigo-c-sharp-programas-basicos-2/</guid>
		<description><![CDATA[(anterior) En esta entrada pondré el código fuente de algunos programas muy básicos desarrollados en C#. Los programas corren tanto en plataformas Microsoft usando Visual Studio, como en cualquier otra plataforma usando Mono. Tal vez quieras visitar leer estas entradas: Cómo crear aplicaciones en C# usando Visual Studio o C#, crear una aplicación usando Mono. [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fcodigo-c-sharp-programas-basicos-2%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%5Bc%C3%B3digo%5D%20C%23%2C%20programas%20b%C3%A1sicos%20%282%29%22%20%7D);"></div>
<p>(<a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/codigo-c-sharp-programas-basicos/">anterior</a>) En esta entrada pondré el código fuente de algunos programas muy básicos desarrollados en C#. Los programas corren tanto en plataformas Microsoft usando Visual Studio, como en cualquier otra plataforma usando <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/acerca-de-mono/">Mono</a>. Tal vez quieras visitar leer estas entradas: <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/c-crear-una-aplicacion-usando-visual-studio/" title="Leer entrada">Cómo crear aplicaciones en C# usando Visual Studio</a> o <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/c-crear-una-aplicacion-usando-mono-referenciando-windowsforms/" title="Leer entrada">C#, crear una aplicación usando Mono</a>.</p>
<p>Tal como pueden apreciar, los en ejemplos se muestra cómo compilar y ejecutar con Mono, pero si lo que quieres es hacerlo con Visual Studio, no te preocupes, <a href="http://www.casidiablo.net/wordpress/index.php/2007/12/10/c-crear-una-aplicacion-usando-visual-studio/">aquí</a> te explico como se hace.</p>
<h3>Calcular promedios con contador de repeticion controlado (usando while)<br />
</h3>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class Promedios
{
	static void Main(string[] args)
	{
		int total = 0,	//resultado total de la suma de los datos
		cantidad,	//cantidad de datos a procesar
		contador=1,
		dato,		//para almacenar el dato actual dentro del ciclo
		promedio;	//promedio de los datos

		//Preguntar por el nÃºmero de datos a procesar
		Console.WriteLine(&quot;Â¿QuÃ© cantidad de datos vas a procesar?&quot;);
		cantidad = Int32.Parse(Console.ReadLine());

		//Iterar 'cantidad' de veces
		while(contador &lt;= cantidad)
		{
			//Capturar dato
			Console.WriteLine(&quot;Digite el dato nÃºmero &quot;+contador+&quot;:&quot;);
			dato = Int32.Parse(Console.ReadLine());

			//Acumular los datos
			total = total + dato;

			//Aumentar el contador
			contador = contador + 1;
		}

		//Calcular el promedio
		promedio = total / cantidad;

		//Mostrar el resultado
		Console.WriteLine(&quot;El promedio de los datos ingresados es: &quot;+promedio);
	} //fin del Main
}//fin de la clase Promedios</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs Promedios.cs<br />
casidiablo@punko:~/c#> mono Promedios.exe<br />
¿Qué cantidad de datos vas a procesar?<br />
6<br />
Digite el dato número 1:<br />
20<br />
Digite el dato número 2:<br />
10<br />
Digite el dato número 3:<br />
60<br />
Digite el dato número 4:<br />
80<br />
Digite el dato número 5:<br />
50<br />
Digite el dato número 6:<br />
62<br />
El promedio de los datos ingresados es: 47</p>
<p><a href="http://casidiablo.net/descargar/C+Sharp+Promedios" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<h3>Calcular promedios con contador de repeticion controlado por centinela (usando while)</h3>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class Promedios2
{
	static void Main(string[] args)
	{
		int total = 0,	//resultado total de la suma de los datos
		contador=1,
		dato,		//para almacenar el dato actual dentro del ciclo
		promedio;	//promedio de los datos

		//Capturar dato
		Console.WriteLine(&quot;Digite el dato número &quot;+contador+&quot;: (-1 para detener el ciclo)&quot;);
		dato = Int32.Parse(Console.ReadLine());

		//Iterar 'cantidad' de veces
		while( dato != -1 )
		{
			//Acumular los datos
			total = total + dato;

			//Aumentar el contador
			contador = contador + 1;

			//Capturar dato
			Console.WriteLine(&quot;Digite el dato número &quot;+contador+&quot;: (-1 para detener el ciclo)&quot;);
			dato = Int32.Parse(Console.ReadLine());
		}

		//Calcular el promedio
		promedio = total / contador;

		//Mostrar el resultado
		Console.WriteLine(&quot;El promedio de los datos ingresados es: &quot;+promedio);
	} //fin del Main
}//fin de la clase Promedios2</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs Promedios2.cs<br />
casidiablo@punko:~/c#> mono Promedios2.exe<br />
Digite el dato número 1: (-1 para detener el ciclo)<br />
32<br />
Digite el dato número 2: (-1 para detener el ciclo)<br />
23<br />
Digite el dato número 3: (-1 para detener el ciclo)<br />
54<br />
Digite el dato número 4: (-1 para detener el ciclo)<br />
32<br />
Digite el dato número 5: (-1 para detener el ciclo)<br />
25<br />
Digite el dato número 6: (-1 para detener el ciclo)<br />
36<br />
Digite el dato número 7: (-1 para detener el ciclo)<br />
-1<br />
El promedio de los datos ingresados es: 28</p>
<p><a href="http://casidiablo.net/descargar/C+Sharp+Promedios+2" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<h3>Análisis de Resultados de Examenes</h3>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class Analisis
{
	static void Main( string[] args )
	{
		int bien = 0,            // numero de
		fallas = 0,          // numero de fallas
		estudiantes = 1,           // contador de estudiantes
		resultado;                // resultado de los examenes
		// procesar 10 estudiantes; loop controlado por contador
		while ( estudiantes &lt;= 10 )
		{
			Console.Write( &quot;Digite los resultados (1=pasó, 2=falló): &quot; );
			resultado = Int32.Parse( Console.ReadLine() );
			if ( resultado == 1 )
				bien = bien + 1;
			else
				fallas = fallas + 1;
			estudiantes = estudiantes + 1;
		}
		// mostrar los resultados
		Console.WriteLine();
		Console.WriteLine( &quot;Pasaron: &quot; + bien );
		Console.WriteLine( &quot;Fallaron: &quot; + fallas );
	} // fin del método Main
} // fin de la clase Analisis</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs Analisis.cs<br />
casidiablo@punko:~/c#> mono Analisis.exe<br />
Digite los resultados (1=pasó, 2=falló): 1<br />
Digite los resultados (1=pasó, 2=falló): 2<br />
Digite los resultados (1=pasó, 2=falló): 1<br />
Digite los resultados (1=pasó, 2=falló): 2<br />
Digite los resultados (1=pasó, 2=falló): 1<br />
Digite los resultados (1=pasó, 2=falló): 2<br />
Digite los resultados (1=pasó, 2=falló): 1<br />
Digite los resultados (1=pasó, 2=falló): 2<br />
Digite los resultados (1=pasó, 2=falló): 2<br />
Digite los resultados (1=pasó, 2=falló): 1<br/><br />
Pasaron: 5<br />
Fallaron: 5</p>
<p><a href="http://casidiablo.net/descargar/C+Sharp+Analisis" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>
<h3>Preincremento y postincremento</h3>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class Incremento
{
	static void Main( string[] args )
	{
		int c;
		c = 5;
		Console.WriteLine( c );   // imprimir 5
		Console.WriteLine( c++ ); // imprimir 5 entonces postincremento
		Console.WriteLine( c );   // imprimir 6
		Console.WriteLine();      // saltar una lÃ­nea
		c = 5;
		Console.WriteLine( c );   // imprimir 5
		Console.WriteLine( ++c ); // preincremento, entonces imprimir 6
		Console.WriteLine( c );   // imprimir 6
	} // fin del mÃ©todo method Main
} // fin de la clase Incremento</pre>
<p><!--INFOLINKS_ON--></p>
<p class="consola">casidiablo@punko:~/c#> mcs Incremento.cs<br />
casidiablo@punko:~/c#> mono Incremento.exe<br />
5<br />
5<br />
6<br/><br />
5<br />
6<br />
6</p>
<p><a href="http://casidiablo.net/descargar/C+Sharp+Incremento" class="descargacodigo" title="Descargar código fuente!">Descargar código fuente</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/codigo-c-sharp-programas-basicos-2/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
	</channel>
</rss>
