Solo por encima vamos a ver algunos elementos más que podemos meter en las aplicaciones visuales con c#. Veamos algunos elementos nuevos
/**
* Elementos.cs
* Ejemplo de uso de elementos de windows.
* A la hora de compilar, para ejecutar como aplicación de windows
* y para que no salga una ventana de DOS, hay que usar estas opciones
* csc /t:winexe Formularios.cs  o en su defecto
* csc /r:System.Windows.Forms.dll /t:winexe Formularios.cs
*
*/

// Usamos esta librería para los formularios de windows
using System.Windows.Forms;
using System.Drawing; // Para posicionamiento

// La clase debe heredar de Form
public class Elementos : Form
{

	// Los controles hay que definirlos como atributos
	// para manejarlos desde cualquier método o handler de eventos
	private Label etiqueta;
	private Button boton;
	private RadioButton opcionA;
	private RadioButton opcionB;
	private GroupBox agrupador; // Para agrupar los radiobuttons

	private ListBox superLista;

	// Constructor
	public Elementos ()
	{
		inicializar();
	}

	// Inicializa los componentes
	private void inicializar ()
	{

		// Vamos a establecer un título
		this.Text = "Aplicación con controles";

		// TAMAÑO
		this.Width = 600;
		this.Height = 400;

		// Elementos /////////////////
		// LABEL o etiqueta
		etiqueta = new Label();
		etiqueta.Text = "Elija algo";

		// Con Controls.Add lo añadimos
		this.Controls.Add(etiqueta);

		// RadioButtons ////////////
		// iniciamos el agrupador
		this.agrupador = new GroupBox();

		this.agrupador.Location = new Point(190, 60);
		this.agrupador.Size = new Size(400, 200);
		this.agrupador.TabStop = false;
		this.agrupador.Text = "Elije";

		// Creamos instancia y la damos propiedades
		this.opcionA = new System.Windows.Forms.RadioButton();
		this.opcionA.Location = new System.Drawing.Point(20, 65); // Posición relativa a su contenedor
		this.opcionA.Size = new Size(90, 15); // Tamaño
		this.opcionA.Text = "Plan A"; // Texto
		this.opcionA.TabIndex = 0; // Orden en la tabulación


		this.opcionB = new System.Windows.Forms.RadioButton();
		this.opcionB.Location = new System.Drawing.Point(20, 90); // Posición relativa a su contenedor
		this.opcionB.Size = new System.Drawing.Size(90, 15); // Tamaño
		this.opcionB.Text = "Plan B"; // Texto
		this.opcionB.TabIndex = 1; // Orden en la tabulación

		this.agrupador.Controls.Add(opcionA);
		this.agrupador.Controls.Add(opcionB);

		this.Controls.Add(agrupador);

		// LISTA ///////////////////////////////
		superLista = new ListBox();
		this.superLista.Location = new System.Drawing.Point(20, 90); // Posición
		this.superLista.Size = new System.Drawing.Size(90, 35); // Tamaño

		// Añadimos elementos a la lista
		superLista.Items.Add("Los cuatro jinetes");
		superLista.Items.Add("La peste");
		superLista.Items.Add("La guerra");
		superLista.Items.Add("El hambre");
		superLista.Items.Add("La muerte");

		this.Controls.Add(superLista);

		// BUTTON o botones
		boton = new Button();

		boton.Text = "Botón de acción";
		boton.Left = 200;
		boton.Top = 300;

		// Asociamos un evento al botón
		boton.Click += new System.EventHandler(this.boton_Click);

		this.Controls.Add(boton);
	}

	// Evento para el botón
	private void boton_Click (object objeto, System.EventArgs e)
	{
		// Termina la aplicación
		Application.Exit();
	}


	// Método principal
	public static void Main ()
	{

		// Pod´riamos usar Show, pero con Run nos hace el trabajo sucio
		Application.Run(new Elementos());
	}
}
Y ahora veamos como meter menús y un messageBox clásico. Existen muchos dialogs predefinidos, pero no es el objetivo profundizar en loa programación visual. Habiendo gtk...
/**
* Menus.cs
* Ejemplo de uso de Menús en ventanas
* A la hora de compilar, para ejecutar como aplicación de windows
* y para que no salga una ventana de DOS, hay que usar estas opciones
* csc /t:winexe Formularios.cs  o en su defecto
* csc /r:System.Windows.Forms.dll /t:winexe Formularios.cs
*
*/

// Usamos esta librería para los formularios de windows
using System;
using System.Windows.Forms;
using System.Drawing; // Para posicionamiento

// La clase debe heredar de Form
public class Menus : Form
{

	// Los controles hay que definirlos como atributos
	// para manejarlos desde cualquier método o handler de eventos
	private Label etiqueta;
	private MainMenu menuFichero;

	// Constructor
	public Menus ()
	{
		inicializar();
	}

	// Inicializa los componentes
	private void inicializar ()
	{

		// Vamos a establecer un título
		this.Text = "Aplicación con controles";

		// TAMAÑO
		this.Width = 600;
		this.Height = 500;

		// Elementos /////////////////
		// LABEL o etiqueta
		etiqueta = new Label();
		etiqueta.Text = "Elija algo";
		this.etiqueta.Location = new System.Drawing.Point(20, 40);

		// Con Controls.Add lo añadimos
		this.Controls.Add(etiqueta);

		// MENU /////////////////////
		this.menuFichero = new MainMenu();
		MenuItem menuitemFichero = menuFichero.MenuItems.Add("File");
		menuitemFichero.MenuItems.Add(new MenuItem("Saluda",new EventHandler(this.Saluda_Selection)));
		menuitemFichero.MenuItems.Add(new MenuItem("Salir", new EventHandler(this.Salir_Selection)));
		MenuItem menuitemHelp = menuFichero.MenuItems.Add("&Ayuda");
		menuitemHelp.MenuItems.Add(new MenuItem("&Ayudame...",new EventHandler(this.FileAyuda_Selection)));
		this.Menu = menuFichero;

	}

	// Evento para el menú
	private void Saluda_Selection (object objeto, System.EventArgs e)
	{
		// Termina la aplicación
		MessageBox.Show( "Hola que tal!", "Saludo");
	}

	// Evento para el menú
	private void Salir_Selection (object objeto, System.EventArgs e)
	{
		// Otra forma de salir en lugar de Exit
		this.Close();
	}

	// Evento para el menú
	private void FileAyuda_Selection (object objeto, System.EventArgs e)
	{
		// Termina la aplicación
		MessageBox.Show( "Ayuda? rtfm o stfg", "Acerca de");
	}

	// Método principal
	public static void Main ()
	{

		// Pod´riamos usar Show, pero con Run nos hace el trabajo sucio
		Application.Run(new Menus());
	}
}