Exportar a XML Doc PDF Otros

65
Exportar a PDF, Excel y Otros formatos en C# (DataGridView & Windows Forms). Hola, en esta ocasión les traigo un ejemplo de como exportar los datos de un dataGridView (en WinForms) a diversos formatos sin la necesidad de interactuar con componentes ActiveX y tampoco de utilizar la interoperabilidad de Office. En el caso de utilizar PDF si utilice una librería llamada iTextSharp y para los demás es solo programación, pero eso lo veremos un poco mas adelante. Este ejemplo muestro un programa que tiene un dataGridView en el que se muestran los datos que se llenan desde una base de datos y esa información es la que se exporta a diferentes formatos. En esta entrada no explico como se llena el dataGridView porque hay muchas formas de hacerlo y me imagino que eso no les interesa. Habiendo quedando claro eso comencemos con el ejemplo. Exportando a PDF Para la exportación de los datos del dataGridView a PDF estoy utilizando una librería muy interesante llamada iTextSharp que es un "Port" de otra librería llamada iText para Java solo que esta es para C#. Al estar utilizando esta librería me sorprendió de una forma muy grata ya que no la conocía. esta puede ser una opción a crystal reports al momento de hacer reportes principalmente si es que no deseas que tu aplicación eleve considerablemente su tamaño y su rendimiento, eso si es mucho mas trabajo porque todo es por código y no puedes diseñar tus reportes de una forma visual aunque con un poco de dedicación puedes sacar PDF’s muy completos en cuanto a diseño ya que esta librería te provee de muchas clases para diseñar el PDF conforme a tus necesidades (Para mas información sobre iTextSharp visiten este pagina http://itextsharp.sourceforge.net/ ), pero bueno no me quiero meter tanto en esto y continuemos con el ejemplo.

Transcript of Exportar a XML Doc PDF Otros

Page 1: Exportar a XML Doc PDF Otros

Exportar a PDF, Excel y Otros formatos en C# (DataGridView & Windows Forms).

Hola, en esta ocasión les traigo un ejemplo de como exportar los datos de un dataGridView (en WinForms) a diversos formatos sin la necesidad de interactuar con componentes ActiveX y tampoco de utilizar la interoperabilidad de Office.

En el caso de utilizar PDF si utilice una librería llamada iTextSharp y para los demás es solo programación, pero eso lo veremos un poco mas adelante.

Este ejemplo muestro un programa que tiene un dataGridView en el que se muestran los datos que se llenan desde una base de datos y esa información es la que se exporta a diferentes formatos. En esta entrada no explico como se llena el dataGridView porque hay muchas formas de hacerlo y me imagino que eso no les interesa. Habiendo quedando claro eso comencemos con el ejemplo.

Exportando a PDF

Para la exportación de los datos del dataGridView a PDF estoy utilizando una librería muy interesante llamada iTextSharp que es un "Port" de otra librería llamada iText para Java solo que esta es para C#. Al estar utilizando esta librería me sorprendió de una forma muy grata ya que no la conocía. esta puede ser una opción a crystal reports al momento de hacer reportes principalmente si es que no deseas que tu aplicación eleve considerablemente su tamaño y su rendimiento, eso si es mucho mas trabajo porque todo es por código y no puedes diseñar tus reportes de una forma visual aunque con un poco de dedicación puedes sacar PDF’s muy completos en cuanto a diseño ya que esta librería te provee de muchas clases para diseñar el PDF conforme a tus necesidades (Para mas información sobre iTextSharp visiten este pagina http://itextsharp.sourceforge.net/ ), pero bueno no me quiero meter tanto en esto y continuemos con el ejemplo.

Primero que nada creamos un Nuevo proyecto del Tipo WidowsApplication en Visual Studio y agregamos una referencia a la DLL de iTextSharp (descargar DLL iTextSharp) en nuestro proyecto.

Page 2: Exportar a XML Doc PDF Otros

Agregamos la dll de iTextSharp nuestro proyecto.

Una vez teniendo agregada la DLL diseñamos un WindowsForm como en la siguiente imagen agregamos un botón al que le pondremos “Exportar ” y accedemos a su evento Onclick.

En este ejemplo tendremos estos datos y los exportaremos a PDF usando ItextSharp.

Antes de poner el código es necesario agregar los siguientes espacios de nombres entre otros:

usingiTextSharp.text;using iTextSharp.text.pdf;

//Código para exportar DataGridView a PDF usando iTextSharp

//Evento clic del Botón Exportar

privatevoid Exportar_pdf(object sender, EventArgs e)

{

try

{

Document doc = newDocument(PageSize.A4.Rotate(), 10, 10

,10, 10);

string filename = "DataGridViewTest.pdf";

Page 3: Exportar a XML Doc PDF Otros

FileStream file = newFileStream(filename,

FileMode.OpenOrCreate,

FileAccess.ReadWrite,

FileShare.ReadWrite);

PdfWriter.GetInstance(doc, file);

doc.Open();

GenerarDocumento(doc);

doc.Close();

Process.Start(filename);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

//Función que genera el documento Pdf

publicvoid GenerarDocumento(Document document)

{

//se crea un objeto PdfTable con el numero de columnas del

//dataGridView

PdfPTabledatatable = newPdfPTable(dataGridView1.ColumnCount);

//asignamos algunas propiedades para el diseño del pdfdatatable.DefaultCell.Padding = 3;

float[] headerwidths = GetTamañoColumnas(dataGridView1);

datatable.SetWidths(headerwidths);

datatable.WidthPercentage = 100;

Page 4: Exportar a XML Doc PDF Otros

datatable.DefaultCell.BorderWidth = 2;

datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;

//SE GENERA EL ENCABEZADO DE LA TABLA EN EL PDF

for (int i = 0; i < dataGridView1.ColumnCount; i++)

{

datatable.AddCell(dataGridView1.Columns[i].HeaderText);

}

datatable.HeaderRows = 1;

datatable.DefaultCell.BorderWidth = 1;

//SE GENERA EL CUERPO DEL PDF

for (int i = 0; i < dataGridView1.RowCount; i++)

{

for (int j = 0; j < dataGridView1.ColumnCount; j++)

{

datatable.AddCell(dataGridView1[j, i].Value.ToString());

}

datatable.CompleteRow();

}

//SE AGREGAR LA PDFPTABLE AL DOCUMENTO

document.Add(datatable);

}

 

Page 5: Exportar a XML Doc PDF Otros

//Función que obtiene los tamaños de las columnas del gridpublicfloat[] GetTamañoColumnas(DataGridView dg){float[] values = newfloat[dg.ColumnCount];for (int i = 0; i <dg.ColumnCount; i++) {values[i] = (float)dg.Columns[i].Width;} return values;}  

Imagen del Pdf generado en este ejemplo.

Nota: Este ejemplo esta hecho para Windows Forms para el componente DataGridView pero para ASP.net seria muy similar para el componente DataGrid solo que manejando con mucho cuidado los paths.

Exportandoaotrosformatos

Page 6: Exportar a XML Doc PDF Otros

diseño de la forma para exportar a otros formatos en este ejemplo

 

Exportando A Excel

Para la exportación a este formato es una pequeña trampita si es que se puede llamar así porque lo que se esta haciendo es generar un documento con código HTML pero guardarlo con extensión XLS!!!, en donde simplemente los datos que tenemos en el Grid lo pasamos a una tabla HTML y ya con eso tendremos nuestros datos exportados a Excel .

El siguiente código es una clase llamada “OtrosFormatos” la cual tiene 2 métodos los cuales son “Export” y “ExportCSV” este ultimo para exportar al formato CSV además de contar con 2 atributos los cuales son el “StreamWriter” (clase del NameSpace System.IO) y la ruta en donde queremos guardar el archivo.

clase OtrosFormatos

publicclassOtrosFormatos

{

StreamWriter w;

stringruta;

publicstringxpath { get { returnruta; } set { value = ruta; }}

///<summary>

/// Constructor que establece el path del archivo

Page 7: Exportar a XML Doc PDF Otros

///</summary>

///<param name="path"></param>

publicOtrosFormatos(string path)

{

ruta = @path;

}

 

///<summary>

/// Exporta datos a un archivo

///</summary>

///<param name="titulos"></param>

///<param name="datos"></param>

publicvoid Export(ArrayListtitulos, DataTabledatos)

{

try

{

FileStreamfs = newFileStream(ruta, FileMode.Create,

FileAccess.ReadWrite);

w = newStreamWriter(fs);

stringcomillas = char.ConvertFromUtf32(34);

StringBuilder html = newStringBuilder();

html.Append(@"<!DOCTYPE html PUBLIC" + comillas +

"-//W3C//DTD XHTML 1.0 Transitional//EN" + comillas +

" " + comillas

+ http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

+ comillas + ">");

Page 8: Exportar a XML Doc PDF Otros

html.Append(@"<html xmlns=" + comillas

+ http://www.w3.org/1999/xhtml

+ comillas + ">");

html.Append(@"<head>");

html.Append(@"<meta http-equiv=" + comillas +"Content-Type"

+ comillas + "content=" + comillas

+ "text/html; charset=utf-8" + comillas+"/>");

html.Append(@"<title>Untitled Document</title>");

html.Append(@"</head>");

html.Append(@"<body>");

 

//Generando encabezados del archivo

//(aquí podemos dar el formato como a una tabla de HTML)

html.Append(@"<table WIDTH=730 CELLSPACING=0 CELLPADDING=10

border=8 BORDERCOLOR=" + comillas + "#333366"

+ comillas + " bgcolor=" + comillas + "#FFFFFF"

+ comillas + ">");

html.Append(@"<tr><b>");

foreach (object item intitulos)

{

html.Append(@"<th>" + item.ToString() + "</th>");

}

html.Append(@"</b></tr>");

//Generando datos del archivo

Page 9: Exportar a XML Doc PDF Otros

for (int i = 0; i <datos.Rows.Count; i++)

{

html.Append(@"<tr>");

for (int j = 0; j <datos.Columns.Count; j++)

{

html.Append(@"<td>" +

datos.Rows[i][j].ToString() + "</td>");

}

html.Append(@"</tr>");

}

html.Append(@"</body>");

html.Append(@"</html>");

w.Write(html.ToString());

w.Close();

}

catch (Exception ex)

{

throw ex;

}

} //Fin de la Función Export

///<summary>

/// Genera un archivo CSV

///</summary>

///<param name="titulos"></param>

Page 10: Exportar a XML Doc PDF Otros

///<param name="datos"></param>

publicvoid ExportCSV(ArrayList titulos, DataTable datos)

{

try

{

FileStreamfs = newFileStream(ruta, FileMode.Create,

FileAccess.ReadWrite);

w = newStreamWriter(fs);

stringcomillas = char.ConvertFromUtf32(34);

StringBuilder CSV = newStringBuilder();

//Encabezados

for (int i = 0; i <titulos.Count; i++)

{

if (i != (titulos.Count - 1))

CSV.Append(comillas + titulos[i].ToString() + comillas + ",");

else

CSV.Append(comillas + titulos[i].ToString() + comillas

+ Environment.NewLine);

}

// se generandatos

for (int i = 0; i <datos.Rows.Count; i++)

{

for (int j = 0; j <datos.Columns.Count; j++)

Page 11: Exportar a XML Doc PDF Otros

{

if (j != (titulos.Count - 1))

CSV.Append(comillas + datos.Rows[i][j].ToString()

+ comillas + ",");

else

CSV.Append(comillas + datos.Rows[i][j].ToString()

+ comillas + Environment.NewLine);

}

}

w.Write(CSV.ToString()); //se escribe la cadena en el archivo

w.Close();

}

catch (Exception ex)

{

throw ex;

}

} //Fin de ExportCSV

} // Fin de Clase OtrosFormatos

 

Código del uso de esta clase en la Aplicación para Exportar a Excel.

//Código para exportar a Excel

//Evento Onclick del Botón

privatevoidBotExcel_Click(object sender, EventArgs e)

{

try

{

Page 12: Exportar a XML Doc PDF Otros

ArrayListtitulos = newArrayList();

DataTable datosTabla = newDataTable();

//Especificar ruta del archivo con extensión de EXCEL.

OtrosFormatos OF = newOtrosFormatos(Application.StartupPath

+ @\\test.xls);

//obtenemos los titulos del grid y creamos las columnas de la tabla

foreach (DataGridViewColumn item in dataGridView1.Columns)

{

titulos.Add(item.HeaderText);

datosTabla.Columns.Add();

}

//se crean los renglones de la tabla

foreach (DataGridViewRow item in dataGridView1.Rows)

{

DataRowrowx = datosTabla.NewRow();

datosTabla.Rows.Add(rowx);

}

//se pasan los datos del dataGridView a la tabla

foreach (DataGridViewColumn item in dataGridView1.Columns)

{

foreach (DataGridViewRowitemxin dataGridView1.Rows)

{

datosTabla.Rows[itemx.Index][item.Index] =

dataGridView1[item.Index, itemx.Index].Value;

}

}

OF.Export(titulos, datosTabla);

Page 13: Exportar a XML Doc PDF Otros

Process.Start(OF.xpath);

MessageBox.Show("ProcesoCompleto");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

} //Fin del Evento Clic del Botón

 

Archivo de Excel Resultante.

Exportación a WORD

Para la exportación de los datos a Word se sigue el mismo procedimiento que para exportar los datos a Excel, solo que en vez de guardar el archivo con extensión .xls lo guardamos con extensión .doc.

//Código para exportar a Word

//Evento Onclick del Botón

privatevoidBotWord_Click(object sender, EventArgs e)

{

Page 14: Exportar a XML Doc PDF Otros

try

{

ArrayListtitulos = newArrayList();

DataTable datosTabla = newDataTable();

//Especificar ruta del archivo con extensión de WORD.

OtrosFormatos OF = newOtrosFormatos(Application.StartupPath

+ @\\test.doc);

//obtenemos los titulos del grid y creamos las columnas de la tabla

foreach (DataGridViewColumn item in dataGridView1.Columns)

{

titulos.Add(item.HeaderText);

datosTabla.Columns.Add();

}

//se crean los renglones de la tabla

foreach (DataGridViewRow item in dataGridView1.Rows)

{

DataRowrowx = datosTabla.NewRow();

datosTabla.Rows.Add(rowx);

}

//se pasan los datos del dataGridView a la tabla

foreach (DataGridViewColumn item in dataGridView1.Columns)

{

foreach (DataGridViewRowitemxin dataGridView1.Rows)

{

datosTabla.Rows[itemx.Index][item.Index] =

dataGridView1[item.Index, itemx.Index].Value;

}

Page 15: Exportar a XML Doc PDF Otros

}

OF.Export(titulos, datosTabla);

Process.Start(OF.xpath);

MessageBox.Show("ProcesoCompleto");

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

} //Fin del Evento Clic del Botón

Archivo .doc Resultante

Exportación a HTML

Para la exportación a HTML es la mas sencilla ya que en este ejemplo lo que se crea es un archivo HTML solo se guarda con extensión HTML y ya esta.

//Código para Exportar a HTML

//Evento Click del Botón

Page 16: Exportar a XML Doc PDF Otros

privatevoidBotHTML_Click(object sender, EventArgs e)

{

try

{

ArrayListtitulos = newArrayList();

DataTable datosTabla = newDataTable();

//Especificar ruta del archivo con extensión de HTML.

OtrosFormatos OF = newOtrosFormatos(Application.StartupPath

+ @\\test.html);

//obtenemos los titulos del grid y creamos las columnas de la tabla

foreach (DataGridViewColumn item in dataGridView1.Columns)

{

titulos.Add(item.HeaderText);

datosTabla.Columns.Add();

}

//se crean los renglones de la tabla

foreach (DataGridViewRow item in dataGridView1.Rows)

{

DataRowrowx = datosTabla.NewRow();

datosTabla.Rows.Add(rowx);

}

//se pasan los datos del dataGridView a la tabla

foreach (DataGridViewColumn item in dataGridView1.Columns)

{

foreach (DataGridViewRowitemxin dataGridView1.Rows)

{

datosTabla.Rows[itemx.Index][item.Index] =

Page 17: Exportar a XML Doc PDF Otros

dataGridView1[item.Index, itemx.Index].Value;

}

}

OF.Export(titulos, datosTabla);

Process.Start(OF.xpath);

MessageBox.Show("ProcesoCompleto");

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

} // Fin del Evento Click del botón

Archivo html resultante

 Exportación a CSV (comma-separated values)

Page 18: Exportar a XML Doc PDF Otros

La exportación a este formato es bastante sencilla y se usa el mismo principio que en los demás solo que usando el método ExportCSV de este ejemplo ya que el vaciado de los datos es diferente porque no se crea un documento HTML sino que se escribe directamente sobre un archivo csv.

Nota: Cabe señalar que este tipo de formatos se puede abrir también en Excel en cual se mostrara los datos en forma de tabla.

//Código para Exportar a CSV

//Evento Click del Botón

privatevoidBotCSV_Click(object sender, EventArgs e)

{

try

{

ArrayListtitulos = newArrayList();

DataTable datosTabla = newDataTable();

//Especificar ruta del archivo con extensión de CSV.

OtrosFormatos OF = newOtrosFormatos(Application.StartupPath

+ @\\test.csv);

//obtenemos los titulos del grid y creamos las columnas de la tabla

foreach (DataGridViewColumn item in dataGridView1.Columns)

{

titulos.Add(item.HeaderText);

datosTabla.Columns.Add();

}

//se crean los renglones de la tabla

foreach (DataGridViewRow item in dataGridView1.Rows)

{

DataRowrowx = datosTabla.NewRow();

datosTabla.Rows.Add(rowx);

Page 19: Exportar a XML Doc PDF Otros

}

//se pasan los datos del dataGridView a la tabla

foreach (DataGridViewColumn item in dataGridView1.Columns)

{

foreach (DataGridViewRowitemxin dataGridView1.Rows)

{

datosTabla.Rows[itemx.Index][item.Index] =

dataGridView1[item.Index, itemx.Index].Value;

}

}

OF.ExportCSV(titulos, datosTabla);

Process.Start(OF.xpath);

MessageBox.Show("ProcesoCompleto");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

} //Fin delEvento Click del Botón

 

Page 20: Exportar a XML Doc PDF Otros

Archivo CSV resultante

Este ejemplo en conjunto con todo su código lo pueden descargar desde mi SkyDrive aquí.

Nota: La conexión a la base de datos de este ejemplo la realice con SQLite, en el ejemplo pongo lo necesario para que funcione el ejecutable incluyendo la base de datos, la DLL iTextSharp y el DataProvider de SQLite, pero si quieren modificar el código y que funcione tendrán que instalar el Proveedor de datos SQLite, esto lo hice por portabilidad ya que con SQlite la base de datos esta en un pequeño archivo.

Pueden preguntar con toda confianza por si tiene alguna duda con SQLite y si esta dentro de mis posibilidades intentare ayudarlos.

Saludos!!!

 

Page 21: Exportar a XML Doc PDF Otros

Etiquetas de Technorati: C#,Exportar,PDF,Excel,Word,HTML,DataGridView,WindowsForms,CSV,Visual StudioPosted: Nov 06 2009, 01:37 PM by Edgar Rafael Galicia Reyes | with 56 comment(s)Filed under: C#, Visual Studio 2008, Exportar, PDF, Word, Excel, CSV, HTML,

DataGridView, Windows Forms

Poner un Icono en la Barra de Tareas

El siguiente ejemplo es de como poner un icono en la barra de Tareas (a un lado del reloj) con una aplicación en C#.

Esto puede servirnos si queremos esconder nuestra aplicación para que no estorbe en el escritorio y solo quede un icono en la barra de tareas con el cual podemos volver a hacer visible a nuestra aplicación.

Empecemos con el ejemplo.

Creamos un proyecto nuevo de C# de tipo Windows Application con Visual Studio y le ponemos por nombre IconoBarraTareas y le damos mas o menos esta forma.

Después de esto agregamos en control que sirve para mostrar un icono en la barra de tareas el cual se llama notifyIcon que se encuentra en el cuadro de herramientas en la sección de controles comunes.

value:Filed%20un

Page 22: Exportar a XML Doc PDF Otros

También agregamos un control ContextMenuStrip este nos servirá para cuando demos un clic derecho al icono en la barra de tareas nos muestre un menú y podamos seleccionar opciones como la de volver a hacer visible la aplicación.

Terminando con esto, al ContextMenuStrip le agregamos algunas opciones como la de Mostrar/Ocultar y Salir.

Para el control notifyIcon tienen unas propiedades muy importantes las cuales hay que modificar para lograr el objetivo de mostrar un icono en la barra de tareas, las propiedades son las siguientes:

BallonTipIcon: Modificando esta propiedad podemos elegir cual tipo de icono se mostrar en el globo informativo del notifyIcon.

BallonTipTitle: Aquí se modifica el titulo del globo informativo.

BallonTipText: Se modifica en texto del globo informativo.

Icon: El icono que se le asigne a esta propiedad será el icono que se mostrara en la barra de tareas.

por ultimo en la propiedad ContextMenuStrip del notifyIcon1 le asociamos el contextMenuStrip1 que agregamos a nuestra aplicación.

Page 23: Exportar a XML Doc PDF Otros

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;

namespaceIconoBarraTareas{     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }

        private void Form1_Load(object sender, EventArgs e)         {             notifyIcon1.ShowBalloonTip(10000);         }

        private void OcultarApp_Click(object sender, EventArgs e)         {             this.Hide();         }

        private void mostrarOcultarToolStripMenuItem_Click(object sender, EventArgs e)         {             this.Visible = !this.Visible;         }

        private void salirToolStripMenuItem_Click(object sender, EventArgs e)         {             Application.Exit();         }

        private void Form1_VisibleChanged(object sender, EventArgs e)         {             if (this.Visible)             {                 notifyIcon1.BalloonTipText = "Forma Visible";             }             else             {                 notifyIcon1.BalloonTipText = "Forma NO Visible";             }

            notifyIcon1.ShowBalloonTip(100000);         }     } }

lo que hace este código es que cuando la Forma Cambie de estado en su propiedad Visible,el notifyIcon mostrar un mensaje en el icono en la barra de tareas.

Page 24: Exportar a XML Doc PDF Otros

 

Y con esto ya tenemos una aplicación la cual podemos ocultar para que no estorbe y realice lo que tenga que realizar sin molestar a nadie.

Este ejemplo lo puedes descargar desde mi SkyDrive aquí.

Etiquetas de Technorati: notifyIconPosted: Aug 30 2009, 03:47 PM by Edgar Rafael Galicia Reyes | with 16 comment(s)

Filed under: C#, Icono, NotifyIcon, Visual Studio 2008

Crear un instalador para WindowsApplication en Visual Studio paso a paso.

Este es un tutorial muy básico de como realizar un instalador en visual Studio pero esto solo abarca un la creación de un instalador de aplicaciones Windows, un instalador para sitios Web es un poco diferente y mas adelante tratare de publicar otra entrada con ese tema.

Habiendo quedando claro eso comencemos con la creación del instalador.

Paso 1.- Agregar un nuevo proyecto de instalación a una solución existente.

Aquí tenemos nuestra solución que se llama “ProyectoPrueba” que contiene un solo proyecto del tipo WindowsApplication que se llama también ProyectoPrueba, no importa el proyecto que sea, solo que sea del tipo Windows application.

value:Filed%20un

Page 25: Exportar a XML Doc PDF Otros

Damos clic con el botón derecho en la solución en el explorador de soluciones y seleccionamos Agregar > Nuevo proyecto.

Al hacer esto se nos mostrara la siguiente pantalla para elegir un nuevo proyecto y seleccionamos un proyecto en: Otros Tipos de proyectos > Instalación e Implementación > Proyecto de instalación.

Page 26: Exportar a XML Doc PDF Otros

Paso 2.- Seleccionar que archivos de nuestro proyecto queremos añadir al instalador.

Y al seleccionar el nuevo proyecto se nos mostrara la siguiente pantalla, la cual tratare de explicar a continuación.

Aquí se ve un árbol de exploración que es el “Sistema de archivos en el equipo de destino”, esto se puede visualizar como el equipo en donde vamos a instalar nuestra aplicación la cual se nos muestran 3 carpetas las cuales tratare de explicar a continuación.

Carpeta de aplicación: Es donde se colocan todos los archivos necesarios para que nuestra aplicación funcione.

Escritorio del usuario: Es donde se colocan los elementos que se mostraran en el escritorio del usuario, casi siempre aquí se pone un acceso directo al Ejecutable (.exe) de nuestra aplicación.

Menú programas del usuario: Lo que ponemos aquí se muestra en “Inicio > Todos los programas” del equipo de destino.

Page 27: Exportar a XML Doc PDF Otros

Ahora damos un clic derecho y seleccionamos Carpeta de aplicación > Agregar > Resultados del proyecto

Y se nos mostrara la siguiente pantalla.

En esta pantalla se nos da a elegir que es lo que vamos a colocar en la carpeta de la aplicación donde podemos seleccionar lo que queramos de nuestro “ProyectoPrueba” (si tenemos mas proyectos en nuestra solución podemos elegir el que queramos).

Estas son algunas opciones que nos ofrece VS.

Page 28: Exportar a XML Doc PDF Otros

Resultado principal: Contiene los archivos DLL o EXE generados por el proyecto. Recursos adaptados: Contiene los ensamblados satélite para los recursos de cada

referencia cultural. Archivos de código fuente: Contiene todos los archivos de código fuente del

proyecto.

En este ejemplo seleccionaremos solo la opción de resultados principal ya que no queremos darle al usuario final el código fuente (¿o si?), y damos aceptar.

Con eso ya estará lista la carpeta de aplicación ahora procedemos a configurar la carpeta Escritorio del usuario en la cual solo agregaremos un acceso directo al Resultado principal de la aplicación (exe).

Se selecciona la carpeta Escritorio del usuario y damos un clic derecho en la parte central de la pantalla y seleccionamos “Crear acceso nuevo acceso directo” tal como se muestra en la pantalla.

Page 29: Exportar a XML Doc PDF Otros

Al hacer esto se nos mostrara la siguiente pantalla que es para elegir a que va hacer referencia nuestro nuevo acceso directo.

Para lo cual nos iremos a la carpeta de la aplicación y seleccionaremos Resultado principal de la aplicación, después damos clic en aceptar.

Una vez hecho esto podemos editar el acceso directo y cambiarle el nombre, el icono que se mostrara, etc..…

Page 30: Exportar a XML Doc PDF Otros

Por ultimo seleccionamos la carpeta Menú programas del usuario damos un clic derecho en ella y seleccionamos Agregar > Carpeta, esto lo hacemos para agregar una nueva carpeta para que aparezca en “Todos los programas” del usuario final.

La cambiamos el nombre a la carpeta creada recientemente a “Proyecto Prueba”, la seleccionamos y damos un clic con el botón derecho en la parte central de la pantalla para agregar nuevamente un acceso directo tal y como lo hicimos en la carpeta Escritorio del usuario.

Page 31: Exportar a XML Doc PDF Otros

Después de esto realizamos lo mismo que hicimos en la carpeta Escritorio del usuario y configuramos el acceso directo para que haga referencia al resultado principal del proyecto.

Así ya tendremos configurado que archivos vamos a copiar, pero aun falta mas configuraciones que este tipo de proyectos de instalación nos ofrece.

Paso 3.- Configurando el proyecto de instalación.

La forma en que vamos a configurar este proyecto es muy básica ya que este tipo de proyectos ofrece muchas configuraciones para los gustos y necesidades de cualquiera.

En el explorador de soluciones seleccionamos el proyecto de instalación y accedemos a sus propiedades.

Page 32: Exportar a XML Doc PDF Otros

Después de hacer esto se nos mostrara la siguiente pantalla, donde se muestra varias configuraciones pero la única que veremos aquí son los requisitos previos de la instalación.

Al dar clic en Requisitos previos, se nos mostrara la siguiente pantalla en donde especificaremos cuales son los requerimientos que necesita nuestra aplicación para funcionar en el equipo de destino.

Page 33: Exportar a XML Doc PDF Otros

Se pueden especificar cuales programas necesitan estar instalados para que nuestra aplicación funcione, estos son algunos ejemplos:

.Net Framework (varias versiones): Esta opción debe de estar seleccionada siempre, porque ya que si el equipo destino no tiene instalada le versión del Framework necesaria, nuestra aplicación no funcionara.

Windows Installer 3.1: Muy necesaria también porque al igual que el Framework es necesario para que el instalador funcione.

Existen mas opciones pero estas son las principales.

también se puede especificar de donde se obtendrán los requerimientos previos es decir que si el instalador detecta que no se tienen los requerimientos necesarios mandara un mensaje al usuario con la información de donde puede obtener dicho requerimiento, esto es configurable en la parte inferior de la siguiente pantalla.

Una vez hecho esto damos por concluido el paso de configuración, pero les repito que existen mas configuraciones y que estas con solo las básicas.

Paso 4.- Generar el archivo de Setup.

Page 34: Exportar a XML Doc PDF Otros

Por ultimo generaremos el archivo de setup cabe señalar que generar el archivo de setup es diferente a generar la solución, este se tiene que hacer de forma separada, para esto seleccionamos Generar > Generar Setup tal como se muestra en la pantalla.

Una vez generado el setup lo podemos encontrar en la carpeta “.\ProyectoPrueba\Setup\Debug” ahí se encuentran por lo regular 2 archivos que se nombran según se le allá puesto al proyecto de instalación, uno es .exe y el otro es .msi y funcionan de la misma manera.

Se puede acceder directamente a estos archivos para probar el instalador o podemos dar en proyecto> Instalar para probar el instalador.

Page 35: Exportar a XML Doc PDF Otros

Después de haber seguido estos pasos ya tendremos nuestro instalador funcionando, estas son algunas imágenes del instalador funcionando.

Page 38: Exportar a XML Doc PDF Otros

Aquí en esta imagen se ve el resultado de la instalación en la Carpeta de la aplicación

Esto esta en el Escritorio del usuario.

Y para terminar se muestra lo que se agrego en la carpeta de Menú programas del usuario.

Page 39: Exportar a XML Doc PDF Otros

Para descargar este ejemplo con todo y su código fuente ahí les dejo el enlace de mi SkyDrive ProyectoPrueba

Si quieres saber mas acerca de los instaladores en visual studio pueden visitar este enlace Cómo... crear un proyecto de instalación (Setup)Etiquetas de Technorati: Instalador,Visual StudioPosted: May 01 2009, 06:48 PM by Edgar Rafael Galicia Reyes | with 120 comment(s)

Filed under: C#, Instalador

WinSock en C#, Aplicación Cliente-Servidor

Etiquetas de Technorati: Winsock,C#

Hola, ya tenia mucho tiempo sin publicar nada pero la mezcla del trabajo y la escuela esta algo complicada.

Bueno hoy le traigo un ejemplo de cómo utilizar los WinSock en c# con Visual Studio en las versiones 2005 y 2008.

Este tema que me parece muy interesante aunque es algo avanzado aun cuando no son muchas líneas código, pero tratare de explicar antes la tecnología aplicada a este ejemplo.

Para este ejemplo usamos el Winsock para establecer una conexión entre el cliente y el servidor. Esto es lo que se usa en todas las computadores hoy en día. La red es una

value:Filed%20un

Page 40: Exportar a XML Doc PDF Otros

herramienta esencial y muy importante para los programadores y se debe aprender a utilizarla.

Es este articulo veremos un sencillo programa de chat, el cual consistirá en una aplicación que será el servidor y otra el cliente que se puede conectar directamente desde Internet o desde una LAN para simplemente intercambiar mensajes de texto.

Control Winsock en C#

El manejo de sockets es complejo realizando todo el trabajo desde cero, porque se tienen que controlar diversos factores como crear encabezados, tamaños de paquetes, tablas de hash, manejo de hilos y muchas mas cosas pero con el control Winsock nos evitaremos todo ese problema, este control es un componente COM y lo podemos añadir a nuestro programa en c# (o cualquier otro lenguaje por ser COM) de una manera muy fácil esto se vera en la construcción del ejemplo.

Que se necesita para este ejemplo???

Se necesita una computadora con Windows, y tener instalado Visual Studio en cualquiera de sus versiones de 2005 o 2008.

Ejemplo:

Bueno aquí empieza lo chido, el código.

Cliente

Lo primero que aremos será construir la aplicación cliente pare ello abriremos una instancia de Visual Studio y crearemos un nuevo proyecto del tipo WindowsApplication y la diseñaremos mas o menos así.

Page 41: Exportar a XML Doc PDF Otros

Después el la caja e herramientas demos clic con el botón derecho y seleccionamos choose Items como se muestra en la imagen.

Se nos desplegara una ventana para elegir el control que ocuparemos para el ejemplo que es el Microsoft WinSock Control, versión 6.0

Page 42: Exportar a XML Doc PDF Otros

Lo seleccionamos y damos OK y este control nos aparecerá en caja de herramientas del Visual Studio como se muestra en la imagen.

Luego arrastramos el control a la forma y así lo tendríamos agregado en nuestra aplicación.

Esta es la imagen del control en la forma, se ve así ya que es un control que no es visible en la ejecución pero como es COM no se pone en la parte de abajo como los otros controles no visibles de visual Studio.

Una vez diseñada la forma se le introduce el siguiente código.

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;

Page 43: Exportar a XML Doc PDF Otros

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

namespace WinSockClient{public partial class Form1 : Form{public Form1(){InitializeComponent(); // se le agregan los eventosnecesarios al //control axWinsock1this.axWinsock1.Error += new AxMSWinsockLib.DMSWinsockControlEvents_ErrorEventHandler(this.axWinsock1_Error);

this.axWinsock1.ConnectEvent += new System.EventHandler(this.axWinsock1_ConnectEvent);this.axWinsock1.DataArrival +=new AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEventHandler(this.axWinsock1_DataArrival);

}

//variable para tener un control del estado de//conexion entre el cliente y el servidorbool isConnected = false;

private void btnConectar_Click(object sender,EventArgs e){//si esta conectado se cierra y si no se abre //la conexionif(isConnected == false){try{ //se cierra el winsock si esta abierto.axWinsock1.Close(); //se llama al método connect del winsock //que pide una IP y un puerto a cual conectarseaxWinsock1.Connect(IPTxt.Text, PuertoText.Text);isConnected = true;labelEstado.Text = "Conectado por el puerto: " + PuertoText.Text;labelEstado.ForeColor = Color.Green;btnConectar.Text = "Desconectar";} // con un bloque try-catch se cacha //cualquier error y lo muestra en el logcatch (System.Windows.Forms.AxHost.InvalidActiveXStateException g){ListBoxLog.Items.Add(g.ToString());}

Page 44: Exportar a XML Doc PDF Otros

catch (Exception ex){ListBoxLog.Items.Add(ex.Message);}}else{try{//Esto cierra la conexion con el clienteaxWinsock1.Close(); this.ListBoxLog.Items.Add("Desconectado...");btnConectar.Text = "Conectar";labelEstado.ForeColor = Color.Red;labelEstado.Text = "Desconectado";isConnected = false;}catch{MessageBox.Show("Ocurrió un error, el puerto no esta abierto", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);}}}

private void btnEnviar_Click(object sender,EventArgs e){ try{ //si esta conectado puede enviar informaciónif(isConnected){ //esto se envía la información que tenga //textbox txtMsg hacia el servidoraxWinsock1.SendData(txtMsg.Text); //con esto visualizamos en pantalla //el mensaje que se acaba de enviarListBoxLog.Items.Add("Cliente- "+ axWinsock1.LocalIP+ ": " + txtMsg.Text);

//borramos el contenido del texbox para //dejarlo listo para mandar un nuevo mensajetxtMsg.Text = "";}elseMessageBox.Show("No se esta conectado con el servidor");}// con un bloque try-catch se cacha //cualquier error y lo muestra en el logcatch (AxMSWinsockLib.AxWinsock.InvalidActiveXStateException g){ ListBoxLog.Items.Add(g.ToString());}

Page 45: Exportar a XML Doc PDF Otros

catch (Exception ex){ ListBoxLog.Items.Add(ex.Message);}}

//en caso de algún error puramente del winsock //se activa este evento y se escribe en el log //la información del errorvoid axWinsock1_Error(object sender,AxMSWinsockLib.DMSWinsockControlEvents_ErrorEvent e){ListBoxLog.Items.Add("Error : " + e.description);isConnected = false;}

// Este evento se activa cuando el servidor envía//y el winsock del cliente atrapa esa informaciónprivate void axWinsock1_DataArrival(object sender,AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent e){//creamos una variable para obtener //los datos que llegaronstring data = "";//creamos otra variable tipo object //porque el método que se utiliza para //recibir datos es objectobject dat = (object)data;//obtenemos la información que envió //el servidor en forma de objectaxWinsock1.GetData(ref dat);//hacemos un cast a esa variable //y la guardamos en la variable datadata = (string)dat; //mostramos la información en logListBoxLog.Items.Add("Servidor - "+ axWinsock1.RemoteHostIP+ ": " + data);}

//Esto pasa cuando se conecta a un servidor,//muestra la información de conexion en el logprivate void axWinsock1_ConnectEvent(object sender, EventArgs e){ListBoxLog.Items.Add("Conectado con el servidor en: "+ axWinsock1.RemoteHostIP);isConnected = true;}}}

Servidor

Page 46: Exportar a XML Doc PDF Otros

Una ves construido el cliente pasamos a construir la aplicación servidor que es muy similar al cliente, para esto abrimos otra instancia de Visual Studio y creamos un proyecto del tipo WindowsApplication y lo diseñamos mas o menos así.

De la misma forma como e hizo en el cliente, agregamos el componente Microsoft WinSock Control, versión 6.0.

Después agregamos el código del servidor.

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;

namespace WinSockServer{public partial class ServerForm1 : Form{public ServerForm1(){InitializeComponent();}//variable para el tener un control//sobre el estado de la conexion

bool isConnected = false;

Page 47: Exportar a XML Doc PDF Otros

private void btnEnviar_Click(object sender,EventArgs e){try{ if(isConnected){//con esto se envía el texto que este el en txtMsgxWinsock1.SendData(txtMsg.Text);//Se muestra en pantalla la información que se envióListBoxLog.Items.Add("Servidor: "+ txtMsg.Text);//se borra la info del txtmsgtxtMsg.Text = "";}elseMessageBox.Show("No estas conectado");}// con un bloque try-catch se cacha cualquier error//que ocurra, y se muestra en el logcatch(AxMSWinsockLib.AxWinsock.InvalidActiveXStateException g){ListBoxLog.Items.Add(g.ToString());}catch(Exception ex){ListBoxLog.Items.Add(ex.Message);}}

private void btnEscuchar_Click(object sender,EventArgs e){try{int x = 0;if(portText.Text != "" &&int.TryParse(portText.Text, out x)){ //Para crear una conexion se necesita //que el servidor(host) siempre este //escuchando por un puerto especifico, //y si un cliente se quiere conectar //a el debe ir a abrir ese puerto

//Con esto se le asigna el puerto al winsockaxWinsock1.LocalPort = Int32.Parse(portText.Text);isConnected = true; //este comando abre la conexion //con el puerto y se mantiene escuchando //por el puerto especificadoaxWinsock1.Listen();labelEstado.ForeColor = Color.Green;labelEstado.Text = "Escuchando por el puerto:";labelPuerto.Text = portText.Text;labelPuerto.ForeColor = Color.Green;pictureBox1.Show();pictureBox2.Hide();

Page 48: Exportar a XML Doc PDF Otros

ListBoxLog.Items.Add("Escuchando por el puerto: " + portText.Text);

buttonDesconectar.Enabled = true;buttonEscuchar.Enabled = false;buttonEnviar.Enabled = true;

}else{MessageBox.Show("Debe asignar un puerto para escuchar","ERROR",MessageBoxButtons.OK,MessageBoxIcon.Information);}}catch{MessageBox.Show("Ocurrió un error, lo mas probable es que el puerto seleccionado no este disponible");}}

private void Desconectar_Click(object sender, EventArgs e){try{//cierra la conexión con el clienteaxWinsock1.Close();this.ListBoxLog.Items.Add("Desconectado.........");buttonEscuchar.Enabled = true;buttonDesconectar.Enabled = false;buttonEnviar.Enabled = false;labelEstado.Text = "Sin Escuchar ningún puerto";labelPuerto.Text = "";labelEstado.ForeColor = Color.Red;pictureBox2.Show();pictureBox1.Hide();}catch{MessageBox.Show("Ocurrió un error, el puerto no esta abierto", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);}}

//cuando se hace una petición de//conexión de parte de un clienteprivate void axWinsock1_ConnectionRequest(object sender, AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent e){if (isConnected == true){ axWinsock1.Close();}

//este comando acepta la conexión con el clienteaxWinsock1.Accept(e.requestID);isConnected = true; //escribe en el log si el cliente esta conectado.

Page 49: Exportar a XML Doc PDF Otros

ListBoxLog.Items.Add("Cliente Conectado: " + axWinsock1.RemoteHostIP);}private void axWinsock1_DataArrival(object sender, AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent e){//creamos una variable para obtener los //datos que llegaronstring data = ""; //creamos otra variable tipo object porque //el método que se utiliza para recibir //datos es objectobject dat = (object)data; //obtenemos la información que envió el //servidor en forma de objectaxWinsock1.GetData(ref dat);//hacemos un cast a esa variable y la //guardamos en la variable datadata = (string)dat;

//mostraos la información en logListBoxLog.Items.Add(axWinsock1.RemoteHostIP + ": " + data);} private void Form1_Load(object sender, EventArgs e){//se muestra el nombre del equipolblHost.Text = axWinsock1.LocalHostName;//se muestra la IP del equipolblIPlocal.Text = axWinsock1.LocalIP;}}}

Por ultimo en la imagen se ve a las dos aplicaciones interactuando, para que esto funcione se debe primero abrir la aplicación servidor y ponerla a escuchar por algún puerto libre y después abrir la app cliente y ponerle la IP de la app servidor así como el puerto por la cual esta escuchando, con esto se dará la conexión y todo funcionara bien, este programa lo hice lo probé de forma local pero también funciona sin ningún problema por una LAN o por Internet.

Page 50: Exportar a XML Doc PDF Otros

Bueno, espero le haya servido a alguien. Si alguien ve algún error o tienen una duda por favor coméntela.

Para descargar las dos aplicaciones con todo el código fuente aquí les dejo el link de mi SkyDrive Winsocks Cliente-Servidor

 

Posted: May 01 2009, 06:25 PM by Edgar Rafael Galicia Reyes | with 70 comment(s)

Filed under: C#, Winsock, Visual Studio 2008

Como cifrar y descifrar texto usando C#

Hola, este tema es un poco mas complicado que el pasado, pero también creo que es de mucha utilidad, mas que nada cuando quieres guardar usuarios en una base de datos y no quieres que nadie, ni si quiera tu pueda saber la contraseña de los usuarios con tan solo mirar la tabla o con alguna consulta desde cualquier manejador de base de datos sea cual sea este.

Este es un simple ejemplo hecho en C# de cómo encriptar y descencriptar texto utilizando una serie de clases provee el Framework, aquí una breve explicación de estas clases.

Clases y Espacios de nombres importantes para su implementación son:

usingSystem.Text;using System.Security.Cryptography;

MD5CryptoServiceProvider (Clase)

value:Filed%20un

Page 51: Exportar a XML Doc PDF Otros

Calcula el valor de hash MD5 (Message-Digest Algorithm 5), de los datos de entrada utilizando la implementación proporcionada por el proveedor de servicios criptográfico (CSP). Esta clase no se puede heredar.

UTF8Encoding (Clase)

Representa una codificación UTF-8 de caracteres Unicode.

TripleDESCryptoServiceProvider (Clase)

Define un objeto contenedor para obtener acceso a la versión del proveedor de servicios criptográficos (CSP) del algoritmo TripleDES (algoritmo que hace triple cifrado del algoritmo Data Encryption Standard) No se puede heredar esta clase.

CipherMode (Enumeración)

Especifica el modo de cifrado de bloques que se utilizará para cifrar.

PaddingMode (Enumeración)

Especifica el tipo de relleno que se aplica cuando el bloque de datos del mensaje es más pequeño que el número total de bytes necesarios para una operación criptográfica.

ICryptoTransform (Interfaz)

Define las operaciones básicas de las transformaciones criptográficas.

Después de ver esto, creamos un proyecto de visual Studio de tipo Windows Application y ya una ves en el explorador de soluciones agregamos una nueva clase y ponemos el siguiente código de una clase que yo ocupo para encriptar texto en mis aplicaciones, se llama CcryptorEngine, que tiene un atributo “key” de tipo string que es la clave que se necesita para cifrar y descifrar el texto, solo dos métodos uno que encripta el texto y otro que lo descencripta, pero debemos recordar que el texto que sea cifrado con determinada clave solo se puede descifrar con la misma clave.

classCCryptorEngine{private string key;//constructorpublic CCryptorEngine(){ /* Estableceruna clave. La misma clave debe ser utilizada para descifrar los datos que son cifrados con esta clave. pueden ser los caracteres que uno desee*/ key = "ABCDEFGHIJKLMÑOPQRSTUVWXYZ abcdefghijklmnñopqrstuvwxyz";}

Page 52: Exportar a XML Doc PDF Otros

public string Encriptar(string texto){ //arreglo de bytes donde guardaremos la llave byte[] keyArray; //arreglo de bytes donde guardaremos el texto //que vamos a encriptar byte[] Arreglo_a_Cifrar = UTF8Encoding.UTF8.GetBytes(texto);

//se utilizan las clases de encriptación //provistas por el Framework //Algoritmo MD5 MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); //se guarda la llave para que se le realice //hashing keyArray = hashmd5.ComputeHash( UTF8Encoding.UTF8.GetBytes(key));

hashmd5.Clear();

//Algoritmo 3DAS TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();

tdes.Key = keyArray; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.PKCS7;

//se empieza con la transformación de la cadena ICryptoTransform cTransform = tdes.CreateEncryptor();

//arreglo de bytes donde se guarda la //cadena cifrada byte[] ArrayResultado = cTransform.TransformFinalBlock(Arreglo_a_Cifrar, 0, Arreglo_a_Cifrar.Length);

tdes.Clear();

//se regresa el resultado en forma de una cadena return Convert.ToBase64String(ArrayResultado, 0, ArrayResultado.Length);}

public string Desencriptar(string textoEncriptado){ byte[] keyArray; //convierte el texto en una secuencia de bytes byte[] Array_a_Descifrar = Convert.FromBase64String(textoEncriptado);

//se llama a las clases que tienen los algoritmos

Page 53: Exportar a XML Doc PDF Otros

//de encriptación se le aplica hashing //algoritmo MD5 MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();

keyArray = hashmd5.ComputeHash( UTF8Encoding.UTF8.GetBytes(key));

hashmd5.Clear();

TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();

tdes.Key = keyArray; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.PKCS7;

ICryptoTransform cTransform = tdes.CreateDecryptor();

byte[] resultArray = cTransform.TransformFinalBlock(Array_a_Descifrar, 0, Array_a_Descifrar.Length);

tdes.Clear(); //se regresa en forma de cadena return UTF8Encoding.UTF8.GetString(resultArray);}}

Después diseñamos una Windows Form más o menos así.

Page 54: Exportar a XML Doc PDF Otros

Ponemos Tres cajas de texto, tres etiquetas, tres botones y unas imágenes PNG de flechas, lo que hace el programa es que al dar clic al botón encriptar cifra el texto del primer textbox y lo muestra en el segundo y al dar clic al botón descencriptar descifra el texto y lo muestra en el ultimo textbox, esto se muestra en el siguiente código.

private void button1_Click(object sender, EventArgs e){//se agrega un bloque try catch//para prevenir cualquier errortry{//se crea un objeto de la clase CCryptorEngineCCryptorEngine crypto = new CCryptorEngine();//se cifra la información del textbox1textbox2.Text = crypto.Encriptar(textbox1.Text);}catch(Exception ex){ MessageBox.Show("Ocurrió un error: " + ex.Message);}}

private void button2_Click(object sender, EventArgs e){//se agrega un bloque try catch para//prevenir cualquier errortry{ //se crea un objeto de la clase CCryptorEngine CCryptorEngine crypto = new CCryptorEngine(); //se descifra la información del textbox2 textbox3.Text = crypto.Desencriptar(textbox2.Text);}catch(Exception ex){ MessageBox.Show("Ocurrió un error: " + ex.Message);}}

Con esto ya tenemos una aplicación que cifra y descifra texto y no solo se puede usar en Windows Forms yo lo he utilizado en paginas web en ASP.net, en móviles y en servicios web XML, todo esto en .Net, bueno espero esto le sirva a alguien.

Saludos!!!

Aquí dejo en link de mi SkyDrive para que bajen esta aplicación con todo y su código fuente link

Etiquetas de Technorati: cifrar y descifrar,C#

Page 55: Exportar a XML Doc PDF Otros

Posted: May 01 2009, 06:21 PM by Edgar Rafael Galicia Reyes | with 58 comment(s)

Filed under: C#, Encriptar, Visual Studio 2008

Modificar una variable de una Windows Form a otra Windows Form en C#

Hola, esto es algo muy sencillo pero en la escuela me lo han preguntado muchas veces y pues a lo mejor a alguien le sirva.

La manera en que yo lo hago es poner el modificador de acceso (public, private, protected, etc) de la variable en public y así poder acceder a ella desde una Form1 a una Form2. Veamos el ejemplo.

Suponemos que ya tenemos nuestro proyecto creado y con las 2 formas la Form1 y la Form2.

En diseñador de la Form2 agregamos un control Label llamado label1 y lo ponemos en el centro de la Form2, a la label1 le cambiamos el tamaño de letra al tamaño 14.

value:Filed%20un

Page 56: Exportar a XML Doc PDF Otros

Seleccionamos la Form2 en el diseñador y damos doble clic sobre la Form2 para generar el prototipo del evento Form2_Load que es cuando la forma es cargada por primera vez.

Después en el código de la Form2 que es el archivo Form2.cs escribimos el siguiente código pero solo el que esta resaltado lo demás es generado automáticamente por el IDE de Visual Studio.

namespace WindowsApplication1{public partial classForm2 : Form {/*Esta es la variable que se va a modificar desde la otra forma se pueda accesar desde afuera*/

public string variable_a_modificar;

publicForm2() { InitializeComponent(); }

private void Form2_Load(object sender, EventArgs e) {//Se muestra la variable en la label //cuando la forma es cargada label1.Text = variable_a_modificar; } }}

Y eso seria todo en la Form2, enseguida nos vamos a la Form1, donde en el diseñador seleccionamos un control Button llamado button1 y lo ponemos en centro de la Form1.

Page 57: Exportar a XML Doc PDF Otros

A continuación activamos el evento button1_Click del button1 dando doble click sobre el button1 y escribimos el siguiente código.

private void button1_Click(object sender, EventArgs e){//creamos un objeto de tipo Form2 llamado formaDosForm2 formaDos = newForm2();//se modifica la variable de la Form2 desde la Form1 formaDos.variable_a_modificar = “Saludos!!!!!!”;//mostramos la formaDos formaDos.Show();}

Con esto ejecutamos el programa oprimiendo la tecla F5 y al momento de hacer clic sobre el botón nos aparecerá la Form2 y la etiqueta del centro estará modificada con en mensaje “Saludos!!!!!!”, que escribimos desde la Form1.

Page 58: Exportar a XML Doc PDF Otros

Espero esto le haya servido alguien, Saludos!!.

Etiquetas de Technorati: Programacion,C#,Windows FormsPosted: May 01 2009, 06:06 PM by Edgar Rafael Galicia Reyes | with 1 comment(s)

Filed under: C#, variables, Visual Studio 2008value:Filed%20un