31 octubre 2010

Explorador de Imagenes con C# en .Net

Aquí dejo el código de un sencillo explorador de archivos de imagen que se encuentran en una carpeta. Para todo esto se utiliza un formulario con un botón para abrir el cuadro de dialogo para seleccionar una carpeta del sistema (FolderBrowserDialog) y después se realiza un recorrido en la carpeta para mostrar los archivos que tengan una extensión de imágenes (jpg, bmp, gif, jpeg, etc), los resultados se muestran en un Treeview en forma de nodos que al seleccionar alguno se mostrara en un PictureBox en tamaño pequeño la imagen y ademas se mostraran unos pocos detalles del archivo de imagen.

Para mejor explicación dejo la imagen del programa en ejecución


Lo que aquí se pretende es mostrar la utilización de FolderBrowserDialog, TreeView y PictureBox.

Código del Programa

//
// Pequeño Explorador de Imagenes con C# en .Net
// Programo: http://gsur.blogspot.com
// El uso y modificación del código es libre y no olviden mencionar el origen gsur.blogspot.com
//

using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Linq;

class Formulario : Form
{
private System.ComponentModel.IContainer components = null;
private System.Windows.Forms.FolderBrowserDialog DialogoSeleccionarCarpetas;
private System.Windows.Forms.Button btnBuscarCarpeta;
private System.Windows.Forms.TreeView Arbol;
private System.Windows.Forms.PictureBox Imagen;
private System.Windows.Forms.Panel PanelSup;
private System.Windows.Forms.Label lblDetalles;
public Formulario()
{
this.DialogoSeleccionarCarpetas = new System.Windows.Forms.FolderBrowserDialog();
this.btnBuscarCarpeta = new System.Windows.Forms.Button();
this.Arbol = new System.Windows.Forms.TreeView();
this.Imagen = new System.Windows.Forms.PictureBox();
this.PanelSup = new System.Windows.Forms.Panel();
this.lblDetalles = new System.Windows.Forms.Label();
this.Size = new System.Drawing.Size(845,610);
this.Text = "Clic en el boton Seleccionar carpeta";

PanelSup.Location = new Point(0,0);
PanelSup.Size = new Size(845, 50);
PanelSup.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
PanelSup.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right);
btnBuscarCarpeta.Location = new System.Drawing.Point(8, 10);
btnBuscarCarpeta.Name = "btnBuscarCarpeta";
btnBuscarCarpeta.Size = new System.Drawing.Size(180, 32);
btnBuscarCarpeta.TabIndex = 1;
btnBuscarCarpeta.Text = "Seleccionar Carpeta";
btnBuscarCarpeta.UseVisualStyleBackColor = true;
btnBuscarCarpeta.Click += new System.EventHandler(btnBuscarCarpeta_Click);
Arbol.Location = new Point(8, 64);
Arbol.Size = new Size(480, 515);
Arbol.Anchor = AnchorStyles.Top | AnchorStyles.Left;
Arbol.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(Arbol_AfterSelect);

Imagen.Location = new System.Drawing.Point(490, 64);
Imagen.Size = new System.Drawing.Size(340, 260);
Imagen.TabStop = false;
Imagen.SizeMode = PictureBoxSizeMode.StretchImage;
Imagen.BorderStyle = BorderStyle.Fixed3D;
Imagen.Anchor = AnchorStyles.Top | AnchorStyles.Left;
lblDetalles.Location = new System.Drawing.Point(500,340);
lblDetalles.Font = new Font(lblDetalles.Font.Name, 8, FontStyle.Bold, lblDetalles.Font.Unit);
Controls.Add(PanelSup);
PanelSup.Controls.Add(btnBuscarCarpeta);
Controls.Add(Arbol);
Controls.Add(Imagen);
Controls.Add(lblDetalles);
DialogoSeleccionarCarpetas.ShowNewFolderButton = false;
DialogoSeleccionarCarpetas.RootFolder = Environment.SpecialFolder.Desktop;
}
private void btnBuscarCarpeta_Click(object sender, EventArgs e)
{
System.IO.FileInfo []archivos;
DialogResult result = DialogoSeleccionarCarpetas.ShowDialog();
if( result == DialogResult.OK )
{
this.Text = DialogoSeleccionarCarpetas.SelectedPath;
var dir = new System.IO.DirectoryInfo(DialogoSeleccionarCarpetas.SelectedPath);
//Uso de LINQ to FileSystem (O LINQ to Objects)
var resultado = from arch in dir.GetFiles()
where arch.Extension.ToLower() == ".jpg" ||
arch.Extension.ToLower() == ".bmp" ||
arch.Extension.ToLower() == ".png" ||
arch.Extension.ToLower() == ".gif" ||
arch.Extension.ToLower() == ".jpeg"
select arch;
archivos=resultado.ToArray<System.IO.FileInfo>();
System.IO.FileInfo item;
Arbol.BeginUpdate();
Arbol.Nodes.Clear();
for(int i=0;i<archivos.Length;i++)
{
item = archivos[i];
if (item.Extension.ToLower() == ".jpg" ||
item.Extension.ToLower() == ".bmp" ||
item.Extension.ToLower() == ".png" ||
item.Extension.ToLower() == ".gif" ||
item.Extension.ToLower() == ".jpeg")
{
Arbol.Nodes.Add(item.FullName);
}
}
Arbol.EndUpdate();
}
}

private void Arbol_AfterSelect(System.Object sender, System.Windows.Forms.TreeViewEventArgs e)
{
System.IO.FileInfo ArchivoImagen = new System.IO.FileInfo(Arbol.SelectedNode.FullPath);
long tArchivo = ArchivoImagen.Length;
string tam_Archivo;
if(tArchivo>1024)
{
if(tArchivo / 1024 > 1024)
tam_Archivo = (tArchivo / (1024*1000)).ToString("N") + " Megabytes";
else
tam_Archivo = (tArchivo / 1024).ToString("N") + " Kilobytes";
}
else
tam_Archivo = tArchivo.ToString("N") + " Bytes";
Imagen.Image = System.Drawing.Image.FromFile(Arbol.SelectedNode.FullPath);
lblDetalles.Text = "Nombre: " + ArchivoImagen.Name;
lblDetalles.Text += "nnTamaño del Archivo: " + tam_Archivo;
lblDetalles.Text += "nnDimensiones (Ancho x Alto): ";
lblDetalles.Text += Imagen.Image.Width.ToString("#,###");
lblDetalles.Text += " x " + Imagen.Image.Height.ToString("#,###") + " Pixeles";
lblDetalles.Size = new Size (lblDetalles.PreferredWidth, lblDetalles.PreferredHeight);
}

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
[STAThread]
public static void Main()
{
Application.Run(new Formulario());
}
}

30 octubre 2010

Impresion en .Net con C#

Aquí dejo el código en C# de un programa que muestra un formulario con un control TextBox y un Boton para mostrar en vista previa lo capturado en el TextBox.

Código del programa

//
// Programa que muestra como mostrar una vista previa e imprimir
// http://gsur.blogspot.com
//

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Impresion
{
class Formulario : Form
{
private System.ComponentModel.IContainer components = null;
private System.Drawing.Printing.PrintDocument ImprimeDocumento;
private System.Windows.Forms.PrintPreviewDialog DialogoVistaPrevia;
private System.Windows.Forms.Button btnImprime;
private System.Windows.Forms.TextBox txtNombre;
private System.Windows.Forms.Label lblNombre;
public Formulario()
{
ImprimeDocumento = new System.Drawing.Printing.PrintDocument();
DialogoVistaPrevia = new System.Windows.Forms.PrintPreviewDialog();
btnImprime = new System.Windows.Forms.Button();
txtNombre = new System.Windows.Forms.TextBox();
lblNombre = new System.Windows.Forms.Label();
ImprimeDocumento.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(ImprimeDocumento_ImprimePagina);
DialogoVistaPrevia.AutoScrollMargin = new System.Drawing.Size(0, 0);
DialogoVistaPrevia.AutoScrollMinSize = new System.Drawing.Size(0, 0);
DialogoVistaPrevia.ClientSize = new System.Drawing.Size(400, 300);
DialogoVistaPrevia.Document = ImprimeDocumento;
DialogoVistaPrevia.Enabled = true;
DialogoVistaPrevia.Name = "printPreviewDialog1";
DialogoVistaPrevia.Visible = false;
btnImprime.Location = new System.Drawing.Point(80, 64);
btnImprime.Name = "btnImprime";
btnImprime.Size = new System.Drawing.Size(80, 22);
btnImprime.TabIndex = 1;
btnImprime.Text = "Vista Previa";
btnImprime.UseVisualStyleBackColor = true;
btnImprime.Click += new System.EventHandler(btnImprime_Click);

txtNombre.Location = new System.Drawing.Point(80, 32);
txtNombre.Name = "txtNombre";
txtNombre.Size = new System.Drawing.Size(200, 22);
txtNombre.TabIndex = 0;
txtNombre.Text = "Escribir su nombre";
lblNombre.Location = new System.Drawing.Point(32, 32);
lblNombre.Name = "lblNombre";
lblNombre.Text = "Nombre: ";
AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
ClientSize = new System.Drawing.Size(322, 287);
Controls.Add(btnImprime);
Controls.Add(txtNombre);
Controls.Add(lblNombre);
Name = "frmImprime";
Text = "Impresion con C#";
}
private void ImprimeDocumento_ImprimePagina(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawString("Nombre: " + txtNombre.Text, new Font("Arial", 16), System.Drawing.Brushes.Blue, new PointF(20,20));
Pen LineaNegra = new Pen(Color.FromArgb(255, 0, 0, 255), 5);
e.Graphics.DrawRectangle(LineaNegra, 120, 50, 450, 1);
}

private void btnImprime_Click(object sender, EventArgs e)
{
DialogoVistaPrevia.ShowDialog();
}
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
}

static class Programa
{
public static void Main()
{
Application.Run(new Formulario());
}
}
}

Imagen de la compilación del programa


Imagen del programa en ejecución

28 octubre 2010

Eventos del Mouse en C# (MouseEventHandler)

Programa de Ejemplo que mostrara las coordenadas de la posición donde se pulse el boton Izquierdo del ratón dentro de un formulario.

Codigo

using System;
using System.Windows.Forms;

class Recibe_Evento
{
public Recibe_Evento(Formulario frm)
{
frm.MouseDown += new MouseEventHandler(AlHacerClicRaton);
}

public void AlHacerClicRaton(object origen, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
((Form)origen).Text = "Posicion: (" + e.X + ", " + e.Y + ")";
else
if((e.Button == MouseButtons.Right) || (e.Button == MouseButtons.Middle))
MessageBox.Show("Debe pulsar el boton izquierdo");
}
}

class Formulario : Form
{
public Formulario()
{
this.Size = new System.Drawing.Size(400,250);
this.Text = "Clic con el raton sobre el formulario";
Recibe_Evento r = new Recibe_Evento(this);
}

protected override void Dispose (bool disposing)
{
try
{
//Para demostrar que dispose es invocado
MessageBox.Show("Liberado");
}
catch(Exception)
{}
base. Dispose(disposing);
}
public static void Main()
{
Application.Run(new Formulario());
}
}

Ventanas donde se muestra la compilación y la ejecución.


Ventana que muestra el mensaje liberado al cerrar la ventana

27 octubre 2010

Programa Ejemplo de clases en C#

Aquí el código de ejemplo de uso de clases en c#

using System;

public class Persona //Clase Persona
{
private string Nombre; //Atributos
private int Edad;
//Constructor
public Persona(string N, int nEdad)
{
elNombre = N;
laEdad = nEdad;
}
//Metodos
public string elNombre
{
get
{
return this.Nombre;
}
set
{
this.Nombre = value;
}
}
public int laEdad
{
get
{
return this.Edad;
}
set
{
this.Edad = value;
}
}
}

public class Prog002
{
public static void Main()
{
Persona per = new Persona("Pedro Martinez Solis",24);
Console.WriteLine("***********************************************************************");
Console.WriteLine(" Programa usando una clase, inicia mostrando los datos que se pasan aln crear la instancia");
Console.WriteLine("***********************************************************************n");
Console.WriteLine("Nombre de la persona: {0}", per.elNombre);
Console.WriteLine("Edad: {0}", per.laEdad);
//Ahora pediremos los datos y los mostraremos
Console.Write("nnNombre de la persona: ");
per.elNombre = Console.ReadLine();
Console.Write("nEdad: ");
per.laEdad = int.Parse(Console.ReadLine());
Console.WriteLine("nnNuevos datos capturados");
Console.WriteLine("Nombre de la persona: {0}", per.elNombre);
Console.WriteLine("Edad: {0}", per.laEdad);
}
}

Ventana de como se vería la compilación y ejecución