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

Descargas

Bueno aquí colocaré los links de programas que he subido que les pueden servir...

Visual Studio 2008


C# Express Edition (para máquinas patito jejeje)


Sharp Developer (Otro compilador para C# pero para maquinas mas patito todavía pero es bueno.. les recomiendo que lo descarguen y lo evalúen)


Bueno, luego subo mas cosas



Saludos

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

Ejercicios de C# Primer Parcial

Buen día Chicos, estos son algunos ejercicios para el Primer parcial de Programación, espero les sirvan y practiquen, mas tarde subo el solucionario de los mismos para que despejen dudas.


Guía de Ejercicios Primer Parcial
  1. Cree un programa para generar el numero de celular ganador de la rifa X, los números se generaran con la siguiente condición: (Figura 1)
  • El Primer dígito solo puede ser un numero entre 9,3 y 8 (debe de hacer una condición que manualmente cambien los números si es 9, coloque 3, si es 3, coloque 8, si es 8 coloque 9, no use la función random solo haga un if dentro del tick del Timer).
  • El segundo dígito solo puede contener números entre 3 y 9.
  • Del tercer Dígito en adelante números entre 0 y 9.
  • Debe ejecutarse 100 veces y mostrar el numero d ejecución en curso que está haciendo, al llegar a esa cantidad de detiene.
  • El botón de reset coloca todos los dígitos en Cero y el contador también, habilita el botón de generar y se des habilita solo, claro, al darle clic al botón generar, este se desactiva y activa el de reset.






Figura 1

  1. Un programa que calcule el total a pagar de la venta de un producto, cree un método privado de nombre calculo que realice las operaciones de acuerdo a la siguiente condición: (Figura 2)
  • El método no recibe ningún parámetro, es privado y solo realizara el cálculo y se lo asignara a las variables públicas (subtotal, impuesto, descuento etc.…)
  • Cuando seleccione un producto debe colocar automáticamente el precio (Ingrese en el combo 5 productos y el precio no debe poder editarse).
  • De acuerdo al tipo de pago debe conceder un descuento sobre el subtotal (Efectivo 5%, Cheque 3%, Letra de Cambio 0%) y si paga con tarjeta debe agregar un impuesto del 2% (Puede agregarlo en negativo o sumarlo al impuesto)
  • Al darle cancelar debe de limpiar todos los textBox y retornar al elemento 0 del combo como elemento seleccionado utilizando el for each.
  • La fecha debe aparecer de forma automática con el formato día // mes// año, observe que debe agregar dos plecas entre cada uno.











Figura 2


  1. Un programa que tenga una imagen (pictureBox) y una lista de 3 radiobotones al cambiar cada uno debes cambiar la imagen, esta debe de estar almacenada en el directorio raíz del proyecto (donde se genera el ejecutable). (Figura 3)













Figura 3


  1. Tiene un grupo de picturebox y al darle click al checkBox habilita el Drag and Drop entre los objetos, automáticamente se habilitan las opciones para que usted decida si se moverá la imagen o se copiará. (Figura 4)












Figura 4


  1. Teniendo 2 TextBox, aplique Drag And Drop, al mover el texto de origen debe seleccionar todo y moverse al siguiente TextBox.
  1. Evalúe el usuario y Clave deben ser los registrados en el programa (dos variables con los datos de usuario=”Administrador” y password=”Aguacate”) luego en la siguiente pestaña debe cambiar la clave del usuario por una nueva. Cree una función privada de nombre Validar_Clave que reciba el nuevo password y la confirmación y retorne un entero dependiendo de: (Figura 5 y 6)
  • 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).








Figura 5












Figura 6








  1. Cree una función que reciba un string (un correo electrónico) y retorne bool (true/false) si es un correo válido de acuerdo a las siguientes condiciones:
  • No debe iniciar con un numero
  • No debe tener espacios
  • No debe de tener mas de un símbolo @
  • debe tener por lo menos un símbolo . y luego de este no mas de tres letras .com, .hn y no menos de dos, no hay extensiones de una letra.
  • Tiene que haber por lo menos 3 letras antes del arroba y dos letras después del arroba antes del primer punto.
  • Después del Arroba solo puede haber un signo punto.


Falta un ejercicio mas, estoy trabajando en ellos, por mientras disfruten desarrollando estos, no valen puntos, es solo para que practiquen. =)