Mostrando entradas con la etiqueta C#. Mostrar todas las entradas
Mostrando entradas con la etiqueta C#. Mostrar todas las entradas

sábado, 7 de mayo de 2011

Clases en C# (DLL)

Una Clase es una plantilla para un objeto.Una Clase define las operaciones que un objeto puede realizar y define un valor que mantiene el estado del objeto, los componentes principales de una clase son: métodos, eventos y propiedades.

Una instancia de una clase es un objeto, se accede a la funcionalidad de un objeto invocando sus métodos y accediendo a sus propiedades, eventos y campos.

Una clase utiliza modificadores para especificar la accesibilidad de la clase y sus componentes, los componentes de una clase son llamados miembros por lo que existen diferentes tipos de miembros.

Una referencia se refiere a una instancia, una instancia es la creación de un objeto del tipo clase que se está declarando.

Una clase utiliza ninguno, uno o más constructores para ayudar a definir la instancia de una clase. Existe una palabra reservada llamada this que sirve para hacer referencia a la clase actual en el ámbito en el cual es utilizada. Cuando se hace referencia a una variable de instancia que tiene el mismo nombre de un parámetro se debe utilizar this.name.

Al crear y manipular objetos no es necesario administrar la memoria que estos ocupan ya que existe un mecanismo que se encarga de esto llamado garbage collector (recolector de basura), pero es una buena práctica no olvidar liberar los recursos.


Bueno, esa es la parte teórica, ahora vamos a programar.... (Vamos a crear una .dll en C#)

Click en Archivo luego en Nuevo Proyecto
en Visual C#, seleccionamos Windows y luego Biblioteca de Clases... le asignamos un nombre en mi caso es ClasesComunes.

Colocan esto.... (Borren todo el archivo, claro algunas cosas son iguales)


sing System;
using System.Collections.Generic;
using System.Text;
namespace ClasesComunes
{
public class Class1
{
}

public class Bicicleta
{
private string modelo_bici;
private double Precio_bici;
private int NumeroDeVelocidades;
private int Velocidad;
private string seri_bici;

public Bicicleta(string serie, int velocidades)
{
seri_bici = serie;
NumeroDeVelocidades = velocidades;
}
public string Serie
{
get
{
return seri_bici;
}
}

public string Modelo
{
get
{
return modelo_bici;
}
set
{
modelo_bici = value;
}
}

public double Precio
{
get
{
return Precio_bici;
}
set
{
if (value > 0)
{
Precio_bici = value;
}
}
}
public void Acelerar(int km)
{
Velocidad = Velocidad + km;
}
public void Frenar()
{
if (Velocidad > 0)
{
Velocidad = Velocidad - 1;
}
}

public int ConsultarVelocidad()
{
return Velocidad;
}

}
}


Esta, es la clase, al compilarla crea una dll que luego debemos copiar en otro proyecto para luego implementarla.

lunes, 2 de mayo de 2011

Convertir ASCII to String y al contrario

Hola chicos

Esta es la forma de convertir un código ASC to Int y al contrario.....
Para que sirve esto?? fácil... si tengo la letra A, puedo convertirlo a su ASCII Alt + 65= A.
y de esta forma podría llenar un arreglo de string con un ciclo porqué?

Porque A=65, B=66, C=67, están de forma consecutiva...

El método es el siguiente...

private int Asc(string s)
{
return Encoding.ASCII.GetBytes(s)[0];
}

El método anterior convierte un String como A en su equivalente ASCII => 65.


Teniendo tres TextBox y un botón programamos lo siguiente...

string convertido;

int ascii = Asc(textBox1.Text.Trim());
convertido = Convert.ToChar(ascii).ToString();
textBox2.Text = ascii.ToString();

textBox3.Text = convertido.ToString();

De esa forma, ingresamos un numero, y en el siguiente TextBox nos nuestra el numero y el de abajo nos muestra la letra nuevamente.....



OTRO CASO DE APLICACIÓN........


Si tengo un arreglo de string y lo quisiera llenar con letras por medio de un ciclo lo podemos hacer de la siguiente manera....

Declaramos el string:

string [] ABC = new string [26];

Ahora lo llenamos de Letras


int indice=0;

for (int x=65; x<91;x++)
{
ABC[indice] = Convert.ToChar(x).ToString();
indice++;
}

De esta forma, el arreglo está lleno... solo impriman las posiciones y listo.....

Evento click de algún botón
For (int x=0;x<26;x++)
{
MessageBox.Show(ABC[x]);
}

Forma No iterativa (Sin usar ciclo)

ABC[0]="A";
ABC[1]="B";
ABC[2]="C";
ABC[3]="D";
ABC[4]="E";
ABC[5]="F";
ABC[6]="G";

.......

Todo esto puede servir para encriptar strings....

viernes, 29 de abril de 2011

Soluciones a los Ejercicios de C# Primer Parcial

Bueno, decidí hacer otro post para cuando, tengo otro grupo de alumnos, solo bloqueo esta entrada y que ellos se maten pensando en los ejercicios y luego solo lo activo jejejeje.

Mi amigo Randa (RAIL) me comentó que tiene problemas para resolver el ejercicio que indica una función para validar la clave del usuario, así que ahí le va un poco de ayuda...

El ejercicio decía algo así...

Cree una función privada de nombre Validar_Clave que reciba el nuevo password y la confirmación y retorne un entero dependiendo de:
a.
Retorne 1 si la nueva clave y la validación no son iguales.
b.
Retorne 2 si la longitud de la cadena es menor a 6 caracteres
c.
Retorne 3 si no tiene por lo menos un numero dentro de la clave (0 a 9)
d.
Retorne 4 si cumple con todos los requisitos anteriores quiere decir que todo está bien.
e.
En el formulario evalúe lo que la función retorna y si es 4 cambie la nueva clave sino indique que error tiene el programa (de acuerdo a lo que retorna)

La solución

Primero declarar dos variables publicas...
string usuario = "Admin";
string password = "Aguacate";

Que contienen el password y el usuario por defecto luego creamos la siguiente función ...

private int Validar_Password(string clave, string confirmar)
{
int longitud_clave = 0;

longitud_clave = clave.Length;

if (longitud_clave < 6)
{
return 2;
}
else
{
if (clave != confirmar)
{
return 1;
}
else
{
string pedacito_de_cadena;
int cant_numeros_en_la_clave = 0;
for (int x = 0; x < longitud_clave; x++)
{
#region Comparaciones
pedacito_de_cadena = clave.Substring(x, 1);
switch (pedacito_de_cadena)
{
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
case "0":
cant_numeros_en_la_clave = cant_numeros_en_la_clave + 1;
break;
}
#endregion
}

if (cant_numeros_en_la_clave == 0)
{
return 3;
}
else
{
return 4;
}

}
}


}

Si, se que es larga, pero ni modo, así es la vida y luego en el evento clic del botón de actualizar:

private void cmdActualizar_Click(object sender, EventArgs e)
{
int resultado=0;
resultado = Validar_Password(txtNuevaClave.Text.Trim(), txtConfirmarClave.Text.Trim());

switch (resultado)
{
case 1:
MessageBox.Show("La nueva clave y la confirmación no son iguales");
txtNuevaClave.Text = "";
txtConfirmarClave.Text = "";
txtNuevaClave.Focus();
break;
case 2:
MessageBox.Show("La nueva clave no puede contener menos de 6 caracteres");
txtNuevaClave.Text = "";
txtConfirmarClave.Text = "";
txtNuevaClave.Focus();
break;
case 3:
MessageBox.Show("La nueva clave debe contener numeros y letras");
txtNuevaClave.Text = "";
txtConfirmarClave.Text = "";
txtNuevaClave.Focus();
break;
case 4:
if( (txtUsuario2.Text.Trim()==usuario)&&(txtClaveActual.Text.Trim()==password) )
{
password=txtNuevaClave.Text.Trim();
MessageBox.Show("Clave cambiada exitosamente");
}
break;

}


}

y listo, lo ejecutamos y verán que si funciona


Cualquier duda no teman en preguntar....

jueves, 28 de abril de 2011

Impiar los TextBox, listBox y colocar el primer elemento seleccionado de un ComboBox con un Foreach

Bueno este post lo hago por mi amigo Tomate (No voy a decir su nombre ni en que curso está) que dice que no enseñé a usar el foreach.. (además que no cree que el código que le doy funcione.. bueno jejejeje).

Por lo general cuando nos toca limpiar Textbox lo hacemos así...
TextBox1.Text="";
TextBox2.Text="";
etc...
y para CheckBox

Check1.Cheked=false;
Check2.Cheked=false;
Check3.Cheked=false;

y los ComboBox...

CboAlgo.SelectedIndex=0;
CboOtro.SelectedIndex=0;


El problema es que si hay 500 TextBox 200 CheckBox y unos 100 ComboBox será una linea por cada objeto...

Pero, utilizando un ciclo Foreach podemos en pocas lineas podes hacer un codigo que funcione para cualquier cantidad de Controles, ya que recorre los objetos dentro del formulario como elementos en un arreglo... Es importante recordar que el Form es un objeto contenedor, dicho otra forma, que dentro de el, hay otros objetos, pero no es el único.. También esta El GroupBox que contiene objetos dentro de el..

Entonces... .


Aquí tenemos la función que hay que crear dentro del formulario:

private void limpiar(Control Todo_el_Form)
{
foreach (Control oControls in Todo_el_Form.Controls)
{
if (oControls is TextBox)
{
((TextBox)oControls).Text = "";
}

if (oControls is CheckBox)
{
((CheckBox)oControls).Checked = false;
}

if (oControls is ComboBox)
{
((ComboBox)oControls).SelectedIndex = 0;
}

if (oControls.Controls.Count > 0)
{
limpiar(oControls);
}

}

}

En el evento click de algún botón deben llamarla así.
limpiar(this);


La explicación .... Bueno el foreach es un ciclo que se ejecuta la cantidad de veces equivalente a la cantidad de controles en el formulario, dicho de otra forma si hay 10 textBox 20 CheckBox y 20 Label se ejecutará 50 veces, claro para los labels no hará nada solo los saltará.

Dentro del ciclo solo hay 4 if y que es lo que comparan?? los primeros tres evaluan si el control es un TextBox, un CheckBox o un ComboBox (Falta agregar el ListBox) y si son esos tipos de Controles, convierte a la variable que es de tipo Control (o sea un control genérico por decirlo así) al tipo de control específico que necesitamos y se limpia o "resetea" de acuerdo al caso.

Lo interesante es, que si colocamos un Tab o un GroupBox, al igual que el Form, estos son controles contenedores, dicho de otra forma, dentro de un control hay otro control o muchos, dependiendo el caso, entonces se hace un if y se evalúa si contiene mas controles se vuelve a llamar la misma función dentro de ella pero esta vez el argumento cambia ya no son todos los controles del formulario si nó solo el control que contiene mas controles. A este proceso se le llama recursión hacer que dentro de una función se invoque ella misma.


El ejercicio resuelto lo pueden descargar desde aquí



A la espera de comentarios.

lunes, 25 de abril de 2011

Drag And Drop en TextBox

Bueno, este es otro buen ejemplo de como hacer Drag and Drop pero con TextBox, la idea es que al darle click sostenido, puedan seleccionar todo el texto y luego arrastrarlo de un Textbox a otro.

Lo primero, como en otros casos, declarar una variable de tipo Objetc de nombre Origenes que mantendrá la referencia del objeto de donde iniciamos el drag & Drop.

object Origenes;

En el evengo Load del Formulario debemos habilitar el Drag & Drop de cada TextBox ya que por defecto vienen desactivados

textBox1.AllowDrop = true;
textBox2.AllowDrop = true;

Claro, con el nombre que ustedes le den a los textBox y la cantidad de elementos que controles que deseen activar el D&D.

Luego programamos los eventos
MouseDown
DragEnter
DragDrop

Copien y Peguen el siguiente código en su formulario, pero fuera de cualquier evento, ya que lo que van a pegar son eventos.

private void TextBox_MouseDown(object sender, MouseEventArgs e)
{
Origenes = sender;
TextBox txt = (TextBox)sender;
txt.SelectAll();
txt.DoDragDrop(txt.Text, DragDropEffects.Copy);
}

private void TextBox_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}

private void TextBox_DragDrop(object sender, DragEventArgs e)
{
TextBox txt = (TextBox)sender;
TextBox origen=(TextBox)Origenes;

if (txt != origen)
{
txt.Text = (string)e.Data.GetData(DataFormats.Text);
origen.Text = "";
}

}

una vez terminado, solo ejecútenlo y listo.

sábado, 16 de mayo de 2009

Drag And Drop en PictureBox

Este efecto es muy interesante y propio de la programación orientada a objetos, en este evento (a diferencia de los otros que solo desencadena un procedimiento, como el Click, load, Mouse Move etc) se desencadenan tres procedimientos:

Mouse Move
DragEnter
DragDrop

En ese orden.

Imaginemos que tenemos dos pictureBox de Nombre Foto1 y otro de nombre Foto2 lo primero que debemos haces es activarles el Drag And Drop, en el evento Load del formulario escribimos:

Foto1.AllowDrop=true;
Foto2.AllowDrop=true;

Cuando le den clic no va a aparecer, así que no se preocupen al respecto solo escríbanlo.

Ahí mismo declaramos una variable de tipo object llamada origenes que sea publica

object origenes;

Esta variable se utiliza para mantener la referencia al objeto de donde se está arrastrando la imagen de no ser así, solo podríamos hacer Copiar/Pegar y nó Drag And Drop, es recomendable declarar esta variable antes del constructor.

Bueno, una vez realizado esto, van a hacer copy/Paste a los procedimientos que llamaran desde los eventos del drag and drop, anteriormente mencionados:

Esto es lo que van a a asociar al evento Mouse Down de los PictureBox Foto1 y Foto2, claro solo el nombre que seria PictureBox_MouseDown

private void PictureBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
///Objeto de origen de la imagen
PictureBox pic = (PictureBox)sender;
origenes = sender;


if (e.Button == MouseButtons.Left)
{
if (pic.Image != null)
{
pic.DoDragDrop(pic.Image, DragDropEffects.Move);
}
}
}

-------------------------------------------------------------------------------------

Esto en el Drag Enter de los dos Picture Box llamas PictureBox_DragEnter

private void PictureBox_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{

if (e.Data.GetDataPresent(DataFormats.Bitmap))
{
e.Effect = DragDropEffects.Move;
}
else
{
e.Effect = DragDropEffects.None;
}
}

-------------------------------------------------------------------------------------
Y por ultimo en el DragDrop asociamos esto:

private void PictureBox_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
PictureBox pic = (PictureBox)sender;
PictureBox org = (PictureBox)origenes;

if (pic.Name != org.Name)
{

pic.Image = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
org.Image = null;

}


}

Una importante observación, esto se copia y pega dentro del formulario, no dentro de ningún evento y luego a los dos objetos se les asocia en cada evento los nombres de los procedimientos Ejemplo

En los eventos (Que están en el símbolo de rayito en la ventana de propiedadas que aparece a la derecha de la ventana) buscamos el evento MouseMove y sin darle doble click en el espacio escribimos PictureBox_MouseDown y damos Enter, igual con los otros, una vez terminado, ejetutamos el formulario y listo.