May 2009 - Posts
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.

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.

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.

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.
-
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.

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..…
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.

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.
![clip_image016[1] clip_image016[1]](http://blogs.windowsclient.net/blogs/linkecubeko/clip_image0161_thumb_2BD7B754.jpg)
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.

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.
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.
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.

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





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.

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
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 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í.
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

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;
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 eventos necesarios al
//control axWinsock1
this.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 servidor
bool isConnected = false;
private void btnConectar_Click(object sender,EventArgs e)
{
//si esta conectado se cierra y si no se abre
//la conexion
if(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 conectarse
axWinsock1.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 log
catch (System.Windows.Forms.AxHost.InvalidActiveXStateException g)
{
ListBoxLog.Items.Add(g.ToString());
}
catch (Exception ex)
{
ListBoxLog.Items.Add(ex.Message);
}
}
else
{
try
{
//Esto cierra la conexion con el cliente
axWinsock1.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ón
if(isConnected)
{
//esto se envía la información que tenga
//textbox txtMsg hacia el servidor
axWinsock1.SendData(txtMsg.Text);
//con esto visualizamos en pantalla
//el mensaje que se acaba de enviar
ListBoxLog.Items.Add("Cliente- "
+ axWinsock1.LocalIP
+ ": " + txtMsg.Text);
//borramos el contenido del texbox para
//dejarlo listo para mandar un nuevo mensaje
txtMsg.Text = "";
}
else
MessageBox.Show("No se esta conectado con el servidor");
}
// con un bloque try-catch se cacha
//cualquier error y lo muestra en el log
catch (AxMSWinsockLib.AxWinsock.InvalidActiveXStateException g)
{
ListBoxLog.Items.Add(g.ToString());
}
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 error
void 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ón
private void axWinsock1_DataArrival(object sender,
AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent e)
{
//creamos una variable para obtener
//los datos que llegaron
string data = "";
//creamos otra variable tipo object
//porque el método que se utiliza para
//recibir datos es object
object dat = (object)data;
//obtenemos la información que envió
//el servidor en forma de object
axWinsock1.GetData(ref dat);
//hacemos un cast a esa variable
//y la guardamos en la variable data
data = (string)dat;
//mostramos la información en log
ListBoxLog.Items.Add("Servidor - "
+ axWinsock1.RemoteHostIP
+ ": " + data);
}
//Esto pasa cuando se conecta a un servidor,
//muestra la información de conexion en el log
private void axWinsock1_ConnectEvent(object sender, EventArgs e)
{
ListBoxLog.Items.Add(
"Conectado con el servidor en: "
+ axWinsock1.RemoteHostIP);
isConnected = true;
}
}
}
Servidor
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;
private void btnEnviar_Click(object sender,EventArgs e)
{
try
{
if(isConnected)
{
//con esto se envía el texto que este el en txtMsg
xWinsock1.SendData(txtMsg.Text);
//Se muestra en pantalla la información que se envió
ListBoxLog.Items.Add("Servidor: "+ txtMsg.Text);
//se borra la info del txtmsg
txtMsg.Text = "";
}
else
MessageBox.Show("No estas conectado");
}
// con un bloque try-catch se cacha cualquier error
//que ocurra, y se muestra en el log
catch(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 winsock
axWinsock1.LocalPort = Int32.Parse(portText.Text);
isConnected = true;
//este comando abre la conexion
//con el puerto y se mantiene escuchando
//por el puerto especificado
axWinsock1.Listen();
labelEstado.ForeColor = Color.Green;
labelEstado.Text = "Escuchando por el puerto:";
labelPuerto.Text = portText.Text;
labelPuerto.ForeColor = Color.Green;
pictureBox1.Show();
pictureBox2.Hide();
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 cliente
axWinsock1.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 cliente
private void axWinsock1_ConnectionRequest(object sender, AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent e)
{
if (isConnected == true)
{
axWinsock1.Close();
}
//este comando acepta la conexión con el cliente
axWinsock1.Accept(e.requestID);
isConnected = true;
//escribe en el log si el cliente esta conectado.
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 llegaron
string data = "";
//creamos otra variable tipo object porque
//el método que se utiliza para recibir
//datos es object
object dat = (object)data;
//obtenemos la información que envió el
//servidor en forma de object
axWinsock1.GetData(ref dat);
//hacemos un cast a esa variable y la
//guardamos en la variable data
data = (string)dat;
//mostraos la información en log
ListBoxLog.Items.Add(axWinsock1.RemoteHostIP + ": " + data);
}
private void Form1_Load(object sender, EventArgs e)
{
//se muestra el nombre del equipo
lblHost.Text = axWinsock1.LocalHostName;
//se muestra la IP del equipo
lblIPlocal.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.
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
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:
using System.Text;
using System.Security.Cryptography;
MD5CryptoServiceProvider (Clase)
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.
class CCryptorEngine
{
private string key;
//constructor
public CCryptorEngine()
{
/* Establecer una 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";
}
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
//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í.
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 error
try
{
//se crea un objeto de la clase CCryptorEngine
CCryptorEngine crypto = new CCryptorEngine();
//se cifra la información del textbox1
textbox2.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 error
try
{
//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#
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.

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 class Form2 : Form
{
/*Esta es la variable que se
va a modificar desde la otra forma
se pueda accesar desde afuera*/
public string variable_a_modificar;
public Form2()
{
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.

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 formaDos
Form2 formaDos = new Form2();
//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.

Espero esto le haya servido alguien, Saludos!!.
Etiquetas de Technorati:
Programacion,
C#,
Windows Forms