Sie sind auf Seite 1von 15

Cmo puedo impedir que el usuario introduzca letras y signos de puntuacin o caracteres

especiales en un cuadro de texto? tengo una aplicacin que estoy desarrollando en Visual C# .Net
y quiero poner un cuadro de texto (TextBox) para que el usuario de la aplicacin de facturacin slo
introduzca nmeros y no permitirle introducr letras cmo puedo hacer esto?
Puedes aadir el siguiente cdigo al evento KeyPress del TextBox:
private void txtCodigoFabricante_KeyPress(object sender,
KeyPressEventArgs e)
{
//Para obligar a que slo se introduzcan nmeros
if (Char.IsDigit(e.KeyChar))
{
e.Handled = false;
}
else
if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso
{
e.Handled = false;
}
else
{
//el resto de teclas pulsadas se desactivan
e.Handled = true;
}
}

Si quieres, por ejemplo, permitir tambin el espacio:


if (Char.IsDigit(e.KeyChar))
{
e.Handled = false;
}
else
if (Char.IsControl(e.KeyChar))
{
e.Handled = false;
}
else
if (Char.IsSeparator(e.KeyChar))
{
e.Handled = false;
}
else
{
e.Handled = true;
}

Truco: Pasar entre TextBox con la tecla ENTER VB y CSharp Windows Forms

Algo mas sencillo que los otros trucos que he estado publicando.. este por lo menos podremos
simular el TABULADOR en nuestras aplicaciones Windows cosa que muchas veces no
encontrabamos la forma de pasar a la siguiente caja de texto o siguiente control con la tecla
ENTER.
Como en los anteriores este debe ser codificado en el Evento KeyPress del TextBox
1: private void TxtPruebaENTER_KeyPress(object sender, KeyPressEventArgs e)
2: {
3:
if (e.KeyChar == (char)(Keys.Enter))
4: {
5:
e.Handled = true;
6:
SendKeys.Send("{TAB}");
7: }
8: }
Buscando cadenas dentro de cadenas en C#
Pues hace tiempo que no escribo nada en el blog, sobre todo porque he estado muy ocupado en
otras cosas y por razones de la vida ya no programo mucho con C#, pero quiero compartir con
ustedes algunos trucos a la hora de buscar y comparar strings con C#.
Cuando digo cadenas, por supuesto que me refiero a cadenas de caracteres, esto de traducir la
programacin al espaol es un dolor de cabeza, por ejemplo, como traducimos array? vector o
arreglo? pero bueno, ese es otro tema, vayamos a lo que importa:
Veamos los mtodos de la clase String en C# para la bsqueda de cadenas:
1. IndexOf, Retorna el ndice de la primera ocurrencia de un String o uno o ms caracteres de una
instancia
2. LastIndexOf, Lo mismo que el anterior, solo que retorna la ltima ocurrencia
3. StartsWith, Como su nombre indica, retorna true o false dependiendo de si la cadena que se le
pasa empieza con una cadena de caracteres dada
4. EndsWith, Lo mismo que el anterior, pero verifica que la cadena buscada est al final.
5. Contains, parecido a IndexOf, solo que en vez de retornar la posicin, retorna true o false.
Ejemplos
Tomemos la siguiente cadena para los ejemplos:
string str = "A silly sentence used for silly purposes.";
1. Usando IndexOf() y LastIndexOf():
int first = str.IndexOf("silly"); //Primera ocurrencia de "silly"

int last = str.LastIndexOf("silly"); //ltima ocurrencia de "silly"


//Tomemos ahora el texto que hay entre la primera y la ltima ocurrencia de "silly"
string str2 = str.Substring(first, last - first);
Console.WriteLine("between two 'silly' words: '{0}'", str2);
Nota: Hace un tiempo escrib un post sobre algunos ejercicios resueltos con string, y hay uno con
Substring()
2. Usando StartsWith() y EndsWith():
bool test1 = str.StartsWith("a silly"); //retorna falso, en 3 vers por que
Console.WriteLine("starts with 'a silly'? {0}", test1);
bool test2 = str.EndsWith(".");
Console.WriteLine("ends with '.'? {0}", test2);
3. Que pasa si no nos importan maysculas y minsculas?
Cuando estamos buscando un texto, C# por defecto es Case Sensitive (sensible a las maysculas
y minsculas), es por eso que en el ejemplo 2, str.StartsWith(a silly)retorna false. Como podemos
hacer que ignore si el texto que buscamos est en maysculas o no? Pasando como segundo
parmetro algn valor del enumStringComparison, modifiquemos un poco el ejemplo 2:
bool test2 = str.StartsWith("a silly", System.StringComparison.OrdinalIgnoreCase);
Console.WriteLine("starts with 'a silly'? {0} (ignoring case)", test2); //ahora si retorna true
Nota: StringComparison tambien se lo podemos pasar a los otros mtodos mencionados.
4. Hagamos un Contains que sea Case Sensitive
Ojal no te hayas perdido mi post anterior sobre Mtodos Extensores en C#, porque justamente
ahora lo vamos a aplicar, para agregar otro mtodo Contains() a la clase String de C#, que no
diferencie entre maysculas y minsculas:
public static bool Contains(this string source, string target, StringComparison comparer)
{
if (source == null) //Source no puede ser null
throw new ArgumentNullException("source");
return source.IndexOf(target, comparer) != -1;
}
5. Un truquito:
string s = "lorem ipsum dolor";
bool isIpsum = s.Contains("ipsum");
es lo mismo que:
bool isIpsum = "lorem ipsum dolor".Contains("ipsum");
//el operador new est implcito
Como siempre, cualquier pregunta que tengas, en los comentarios

Ejercicios resueltos de string en C#


Aqu les pongo unos cuantos ejercicios resueltos y cdigos escritos en C# relacionados con el
manejo de strings (cadenas) que seguro te ayudar de muchas formas a mejorar el uso de este
popular tipo de dato. Pero primero veamos cuales son los mtodos y propiedades de esta clase
String. Mtodos y propiedades fundamentalespublic char this[int index] {get;} Devuelve el
caracter de la posicin especificada de la cadena. public int Length {get;} Devuelve la longitud de la
cadena (cantidad de caracteres que contiene) empezando a contar desde 1. public string Insert(int
startIndex, string value); Inserta la cadena especificada a partir de la posicin dada.public string
Remove(int startIndex,int count); Elimina el nmero especificado de caracteres a partir de la
posicin dada. public string[] Split(params char[] separator);Busca las subcadenas contenidas
dentro de la cadena, delimitndolas por los separadores que se le especifiquen, y las copia a un
arreglo de cadenas. public string Substring(int startIndex); Devuelve la subcadena contenida a
partir de la posicin especificada. public string Substring(int index, int length); Devuelve la
subcadena que empieza a partir del ndice especfico, y tiene la longitud indicada. Ejercicios
resueltos1- Implemente un mtodo que dado un string s cualquiera, devuelva un nuevo string que
se el inverso de s. (ej: entrada: puntopeek; salida: keepotnup)
public string Invierte(string a)
{
string b = "";
for (int i = 0; i < a.Length ; i++)
b = a[i] + b;
return b;
}
2- Implemente una funcin que dado un string, una posicin de comienzo y una cantidad de
caracteres, devuelva una subcadena (substring) de una cadena dada a partir de los parmetros
dados (ej: entrada: puntopeek, pos= 2, cant= 4; salida: ntop.)
public string SubString(string a, int pos, int cant)
{
string pedazo = "" ;
if((pos + cant) > a.Length)
throw new Exception("");
else
{
for (int j = pos; j < cant + pos ; j ++ )
pedazo += a[j];
return pedazo;
}
}
3- Implemente un mtodo Replace, que reciba un string s, y dos caracteres old y new. Dicha
funcin debe reemplazar todas las ocurrencias del caracter old por el carcter new, y devolver un
nuevo string con dicha caracterstica. (ej: entrada: programacion, old= a, new=i; salida:
progrimicion)
public string Replace (string a, char old, char new)
{
string result = "";
for (int i = 0; i < a.Length ; i++)
{
if(a[i] == old)
result += new;
else
result += a[i];

}
return result;
}
4*- Implemente un mtodo Combinar, que dado un string s, devuelva todas las combinaciones
posibles que se pueden formar a partir de los caracteres de s. Este mtodo es un poco ms
complicado, pero muy til y prctico. Para esto usaremos recursividad, para ir generando todas las
posibles combinaciones. (ej: entrada: hoy; salida: hoy, hyo, ohy, oyh, yho, yoh)
public void Combina(string s)
{
bool[] marcas = new bool[s.Length];
Combina(s, "", marcas);
}
void Combina(string original, string combinado, bool[] marcas)
{
if (original.Length == combinado.Length)
Console.WriteLine(combinado);
for (int i = 0; i < marcas.Length; i++)
{
if (!marcas[i])
{
marcas[i] = true;
Combina(original, combinado + original[i], marcas);
marcas[i] = false;
}
}
}
Si tienes alguna duda sobre los cdigos anteriores, o quieres agregar algo, en los comentarios.
Bueno, hasta aqu esta entrega de ejercicios resueltos. Espero que te sirva, y si quieres practicar,
guate por estos ejemplos y trata de implementar otros mtodos relacionados con string, como son:
1- Eliminar un carcter dado de una cadena.
public string Eliminar(string s, char c).
2- Ver si un string es palndromo no, o sea, se escribe igual al derecho que al revs.
public bool EsPalindromo(string s)
3- Ver cul es el letra que ms se repite en una cadena.
public char MasPopular(string s)
Es muy aconsejable que traten de hacer estos ejercicios solos, auxilindose de los ejemplos
anteriores. De todos modos pondr la respuesta de estos ejercicios en una prxima entrega la
semana que viene.
Recortar y quitar caracteres de cadenas en .NET Framework
Si va a analizar una frase en las palabras que la forman, el resultado pueden ser palabras con
espacios en blanco delante y detrs. En este caso, puede usar uno de los mtodos de recorte de la
clase System.String para quitar espacios u otros caracteres de una posicin especificada de la
cadena. En la tabla siguiente se describen los mtodos de recorte disponibles.

Nombre del
mtodo

Utilice

String.Trim

Quita del comienzo y del final de una cadena los espacios en blanco o los caracteres especific
caracteres.

String.TrimEnd

Quita los caracteres especificados de una matriz de caracteres del final de una cadena.

String.TrimStart

Quita los caracteres especificados de una matriz de caracteres del comienzo de una cadena.

String.Remove

Quita un nmero especificado de caracteres de una posicin de ndice especificada de una ca

Mtodos que devuelven cadenas


En la tabla siguiente se enumeran algunos mtodos tiles que devuelven nuevos objetos de
cadena.

Nombre del mtodo

Utilice

String.Format

Compila una cadena con formato a partir de un conjunto de objetos de entrada.

String.Concat

Compila cadenas a partir de dos o ms cadenas.

String.Join

Compila una nueva cadena combinando una matriz de cadenas.

String.Insert

Compila una nueva cadena mediante la insercin de una cadena en el ndice especificado de

String.CopyTo

Copia los caracteres especificados de una cadena en la posicin especificada de una matriz

Formato
El mtodo String.Format se puede usar para crear cadenas con formato y concatenar cadenas
que representan varios objetos. Este mtodo convierte automticamente en cadena cualquier
objeto que se pase. Por ejemplo, si la aplicacin debe mostrar al usuario un valor Int32 y un
valor DateTime, es muy sencillo construir una cadena que represente estos valores con el
mtodo Format. Para obtener ms informacin sobre las convenciones de formato utilizadas con
este mtodo, vea la seccin Formato compuesto.
Cadenas de relleno en .NET Framework
Utilice uno de los siguientes mtodos String para crear una nueva cadena formada por una cadena
original que se rellena con caracteres iniciales o finales hasta alcanzar una longitud total
especificada. El carcter de relleno puede ser un espacio o un carcter especificado y, por lo tanto,
la cadena parece estar alineada a la derecha o a la izquierda.
Nombre del mtodo

Utilice

String.PadLeft

Rellena una cadena con caracteres iniciales hasta alcanzar la longitud total especificad

String.PadRight

Rellena una cadena con caracteres finales hasta alcanzar la longitud total especificada

Comparar cadenas en .NET Framework


.NET Framework proporciona varios mtodos para comparar los valores de cadenas. En la tabla
siguiente se enumeran y describen los mtodos de comparacin de valores.

Nombre del mtodo

Utilice

String.Compare

Compara los valores de dos cadenas. Devuelve un valor entero.

String.CompareOrdina
l

Compara dos cadenas independientemente de la referencia cultural local. Devuelve un valor

String.CompareTo

Compara el objeto de cadena actual con otra cadena. Devuelve un valor entero.

String.StartsWith

Determina si una cadena comienza con la cadena que se pasa. Devuelve un valor booleano

String.EndsWith

Determina si una cadena termina con la cadena que se pasa. Devuelve un valor booleano.

String.Equals

Determina si dos cadenas son iguales. Devuelve un valor booleano.

String.IndexOf

Devuelve la posicin de ndice de un carcter o cadena, empezando en el comienzo de la ca


examina. Devuelve un valor entero.

String.LastIndexOf

Devuelve la posicin de ndice de un carcter o cadena, empezando en el final de la cadena


valor entero.

Comparar
El mtodo String.Compare proporciona una manera de comparar exhaustivamente el objeto de
cadena actual con otra cadena u objeto. En este mtodo se tiene en cuenta la referencia
cultural. Esta funcin se puede usar para comparar dos cadenas o subcadenas de dos
cadenas. Adems, se proporcionan sobrecargas para tener en cuenta o no las diferencias de
referencia cultural y de maysculas y minsculas. En la tabla siguiente se muestran los tres valores
enteros que este mtodo puede devolver.

Tipo de valor

Condition

Un entero negativo

strA es menor que strB.

strA es igual que strB.

Un entero positivo.

Esta instancia es mayor que value.

O bien

O bien

value es una referencia nula (Nothing en Visual Basic).

Importante

La finalidad principal del mtodo Compare es que se utilice para la ordenacin o clasificacin de cadenas. El mtodo
para comprobar la igualdad (es decir, para buscar explcitamente un valor devuelto que sea 0 sin tener en cuenta si un
mayor que otra). En su lugar, para determinar si dos cadenas son iguales, use el mtodo String.Equals(String, String,

Cambiar maysculas y minsculas en .NET Framework


Si se escribe una aplicacin que acepta la entrada de informacin por parte del usuario, nunca se
puede estar seguro de si se utilizarn maysculas o minsculas para introducir los datos. Puesto
que los mtodos que comparan cadenas y caracteres distinguen maysculas y minsculas, las
maysculas y minsculas de las cadenas que escriben los usuarios se deben convertir para
compararlas con los valores constantes. Cambiar las maysculas y minsculas de una cadena es
muy sencillo. En la tabla siguiente se describen los dos mtodos existentes para cambiar
maysculas y minsculas. Cada mtodo proporciona una sobrecarga que acepta una referencia
cultural.

Nombre del mtodo

Utilice

String.ToUpper

Convierte todos los caracteres de una cadena en maysculas.

String.ToLower

Convierte todos los caracteres de una cadena en minsculas.

Utilizar la clase StringBuilder en .NET Framework


El objeto String es inmutable. Cada vez que se usa uno de los mtodos de la clase System.String,
se crea un nuevo objeto de cadena en la memoria, que necesita una nueva asignacin de espacio
para ese objeto nuevo. En las situaciones en que sea necesario realizar modificaciones repetidas
en una cadena, la sobrecarga asociada a la creacin de un nuevo objeto String puede disminuir el
rendimiento. La clase System.Text.StringBuilder se puede utilizar para modificar una cadena sin
crear un nuevo objeto. Por ejemplo, el uso de la clase StringBuilder puede mejorar el rendimiento al
concatenar muchas cadenas en un bucle.
Crear instancias de un objeto StringBuilder
Se puede crear una nueva instancia de la clase StringBuilder inicializando la variable con uno de
los mtodos de constructor sobrecargados, como se muestra en el ejemplo siguiente.
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

Configurar la capacidad y la longitud


Aunque StringBuilder es un objeto dinmico que permite expandir el nmero de caracteres de la
cadena que encapsula, se puede especificar un valor para el nmero mximo de caracteres que
puede contener. Este valor se conoce como la capacidad del objeto y no se debe confundir con la
longitud de la cadena que contiene el objeto StringBuilder actual. Por ejemplo, podra crear una
nueva instancia de la clase StringBuilder con la cadena "Hola" que tiene una longitud de 5, y podra
especificar que el objeto tiene una capacidad mxima de 25. Al modificar StringBuilder, no reasigna
el tamao para s mismo hasta que se alcance la capacidad. Cuando sucede esto, el nuevo
espacio se asigna automticamente y se dobla la capacidad. La capacidad de la
clase StringBuilder se puede especificar con uno de los constructores sobrecargados. En el
ejemplo siguiente se especifica que el objetoMyStringBuilder se puede expandir hasta un mximo
de 25 espacios.
C#
StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25);

Adems, se puede utilizar la propiedad de lectura y escritura Capacity para establecer la longitud
mxima del objeto. En el ejemplo siguiente se utiliza la propiedad Capacity para definir la longitud
mxima del objeto.

C#
MyStringBuilder.Capacity = 25;

El mtodo EnsureCapacity se puede utilizar para comprobar la capacidad actual


de StringBuilder. Si la capacidad es mayor que el valor que se pasa, no se hace ningn cambio;
sin embargo, si es menor que el valor que se pasa, la capacidad actual se cambia para que
coincida con dicho valor.
Tambin se puede ver y establecer la propiedad Length. Si se establece la propiedad Length en un
valor mayor que el de la propiedad Capacity, la propiedad Capacity se cambia automticamente al
mismo valor de la propiedad Length. Si se establece la propiedad Length a un valor menor que la
longitud de la cadena actual de StringBuilder, se acorta la cadena.
Modificar la cadena StringBuilder
En la tabla siguiente se enumeran los mtodos que se pueden utilizar para modificar el contenido
de StringBuilder.

Nombre del mtodo

Utilice

StringBuilder.Append

Agrega informacin al final de la StringBuilder actual.

StringBuilder.AppendFormat

Reemplaza un especificador de formato que se pasa en una cadena con texto co

StringBuilder.Insert

Inserta una cadena u objeto en el ndice especificado de la StringBuilder actual.

StringBuilder.Remove

Quita el nmero de caracteres especificado de la StringBuilder actual.

StringBuilder.Replace

Reemplaza un carcter especificado en el ndice especificado.

.Net Crear una Dll en C# (paso a paso)


Posted by: lvgstark
Pues eso, que hoy vamos a ver como se crea una Dll desde cero y como la utilizamos en un proyecto.

Que es un DLL?
Un DLL o Dynamic Link Library (Biblioteca de Vinculo Dinamica en espaol) es un archivo que contiene
funciones o clases u otros recursos que pueden ser utilizados por una aplilcacion externa al DLL. Como lo dice
su nombre, una aplicacion lo que hace es hacer un vinculo a la biblioteca y de esta forma puede hacer uso de
funciones, procedimientos o metodos que se encuentren en esta biblioteca. Para darles un ejemplo, yo puedo
tener un DLL con funciones matematicas, y en vez de escribirlas otra vez en el codigo de mi aplicacion,
simplemente hago un vinculo al DLL que contiene las funciones matematicas y asi las puedo utilizar desde mi
aplicacion. La ventaja de esto es que se recicla codigo, y el codigo es mas ordenado tambien, sin embargo asi
tambien tiene desventajas.
Pasos para crear y usar la Dll
Paso 1: Creacin de la Dll
El primer paso que realizaremos ser crear un nuevo proyecto del tipo Class Library, que en este caso he
bautizado como KLSTools.
En l, crearemos una clase que contenga una operacin que sume diferentes valores que pasaremos como
referencias.
Creacin de la Dll

Contenido de la Dll
ClicparaverTextoPlano

C#:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.

using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;

namespace KLSTools
{
public class Operaciones
{
public int Sumar(int A, int B)
{
int valor = A + B;
return valor;
}
}
}

Definicin y estructura de la Dll

Paso 2: Creacin de nuestro proyecto independiente


Lo siguiente ser crear un proyecto independiente, pero en el que necesitaremos utilizar la Dll que hemos
creado. En este caso hemos creado un proyecto bsico del tipo Windows Forms, y que consistir en un botn
que al pulsarlo, nos mostrar un mensaje con la operacin que le pasemos.
Paso 3: Referenciar nuestra Dll
Para poder utilizar nuestra Dll, er preciso referenciarla, por lo que iremos a Referencias y aadiremos una
nueva Referencia (que no ser System, ni Com), si no que iremos a buscarla mediante el browser.

Paso 4: Referenciar la Dll en el proyecto e instanciar la clase que utilizaremos.


Una vez aadida la referencia, lo siguiente ser llamar al espacio de nombres de la Dll, mediante el comando
using y posteriormente, instanciar la clase que utiliaremos mediante el constructor.

Y ya estar operativa nuestra aplicacin referenciando


una Dll que hemos creado.
Referenciacin de la Dll e instancia de la clase
ClicparaverTextoPlano

C#:
1.
2.
3.
4.
5.
6.
7.
8.
9.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//Referencio a mi DLL
using KLSTools;

10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//Instancio la clase de mi Dll
Operaciones miOperacion = new Operaciones();
MessageBox.Show(miOperacion.Sumar(1, 4).ToString());
}
}
}

Es una miniaplicacin sencilla pero rica, rica. jejeje


Referencias finales:
para quien quiera ver un ejemplo en Visual Basic, referencio el blog de RobertoYudice, donde me he basado
para efectuar este mini tutorial.

Das könnte Ihnen auch gefallen