algoritmos

34
VALIDACION CEDULA EN VB.NET Hola aqui les presento el algoritmo para validar el numero de cédulo de ua persona, a continuación el codigo en VisualBasic205 • El ruc de una persona natural será 13 dígitos, sin letras, sin caracteres especiales , únicamente números, de los cuales los 10 primeros será la cédula de identidad. • El tercer dígito es menor a 6 ( 0,1,2,3,4,5 ). • Los tres últimos dígitos son 001,002,003 etc., dependiendo el número de establecimientos adicionales. • La validación de la cédula de Identidad pasa un algoritmo “Módulo 10”. Al número se lo divide en 13 partes, las 9 primeras son el número mismo, la 10 es el dígito autoverificador, y las 3 restantes indican si es principal o establecimiento adicional. • Las 2 primeras posiciones corresponden a la provincia donde fue expedida, por lo cual los dos primeros números no será mayor a 22 ni menor a 1. • Los 3 últimos bytes no podrán ser 000, ya que siempre por lo menos tendrá una principal. • Los coeficientes usados para verificar el décimo dígito de la cédula, mediante el algoritmo “Módulo 10” COEFICIENTES = 2.1.2.1.2.1.2.1.2 ( cuando el residuo es 0 el digito verificador es 0) Ejemplo: cédula = 1710034065 2 1 2 1 2 1 2 1 2 (Coeficiente) 1 7 1 0 0 3 4 0 6 (Número de Cédula) 2 7 2 0 0 3 8 0 12 = 25 (Multiplicar cada dígito de la cédula por el 3 coeficiente, si es mayor a 10 sumo entre dígitos). sumar las multiplicaciones Del resultado de la suma 25/10= 2 Residuo 5 10-5 = 5 (dígito verificador) Public Class BLCedulaIdentidad Public Function compruebaCedula(ByVal numCedula As String) As Boolean Dim dig1, dig2, num1, num2, num3, num4, num5, num6, num7, num8, num9 As String Dim digProvincia, tercerDig, ultimoDig, resultSuma, residuo, valorComprovador As Integer Try dig1 = numCedula.Substring(0, 2) dig2 = numCedula.Substring(2, 1)

Transcript of algoritmos

Page 1: algoritmos

VALIDACION CEDULA EN VB.NET

Hola aqui les presento el algoritmo para validar el numero de cédulo de ua persona, a continuación el

codigo en VisualBasic205

• El ruc de una persona natural será 13 dígitos, sin letras, sin caracteres especiales , únicamente

números, de los cuales los 10 primeros será la cédula de identidad.

• El tercer dígito es menor a 6 ( 0,1,2,3,4,5 ).

• Los tres últimos dígitos son 001,002,003 etc., dependiendo el número de establecimientos

adicionales.

• La validación de la cédula de Identidad pasa un algoritmo “Módulo 10”. Al número se lo divide en 13

partes, las 9 primeras son el número mismo, la 10 es el dígito autoverificador, y las 3 restantes indican

si es principal o establecimiento adicional.

• Las 2 primeras posiciones corresponden a la provincia donde fue expedida, por lo cual los dos

primeros números no será mayor a 22 ni menor a 1.

• Los 3 últimos bytes no podrán ser 000, ya que siempre por lo menos tendrá una principal.

• Los coeficientes usados para verificar el décimo dígito de la cédula, mediante el algoritmo “Módulo

10”

COEFICIENTES = 2.1.2.1.2.1.2.1.2 ( cuando el residuo es 0 el digito verificador es 0)

Ejemplo: cédula = 1710034065

2 1 2 1 2 1 2 1 2 (Coeficiente)

1 7 1 0 0 3 4 0 6 (Número de Cédula)

2 7 2 0 0 3 8 0 12 = 25 (Multiplicar cada dígito de la cédula por el

3 coeficiente, si es mayor a 10 sumo entre dígitos).

sumar las multiplicaciones

Del resultado de la suma

25/10= 2 Residuo 5 10-5 = 5 (dígito verificador)

Public Class BLCedulaIdentidad

Public Function compruebaCedula(ByVal numCedula As String) As Boolean

Dim dig1, dig2, num1, num2, num3, num4, num5, num6, num7, num8, num9 As String

Dim digProvincia, tercerDig, ultimoDig, resultSuma, residuo, valorComprovador As Integer

Try

dig1 = numCedula.Substring(0, 2)

dig2 = numCedula.Substring(2, 1)

digProvincia = CInt(dig1)

Page 2: algoritmos

If (digProvincia >= 1 Or digProvincia <= 22) Then

tercerDig = CInt(dig2)

If tercerDig 9 Then

dig1 = sumaDig(dig1)

End If

If dig2 > 9 Then

dig2 = sumaDig(dig2)

End If

If dig3 > 9 Then

dig3 = sumaDig(dig3)

End If

If dig4 > 9 Then

dig4 = sumaDig(dig4)

End If

If dig5 > 9 Then

dig5 = sumaDig(dig5)

End If

If dig6 > 9 Then

dig6 = sumaDig(dig6)

End If

If dig7 > 9 Then

dig7 = sumaDig(dig7)

End If

If dig8 > 9 Then

dig8 = sumaDig(dig8)

End If

If dig9 > 9 Then

dig9 = sumaDig(dig9)

End If

valorComprovador = dig1 + dig2 + dig3 + dig4 + dig5 + dig6 + dig7 + dig8 + dig9

Catch ex As Exception

Throw

End Try

Return valorComprovador

End Function

Public Function sumaDig(ByVal numero As Integer) As Integer

Dim strNumero, strDig As String

Dim numDig, i, valor As Integer

Page 3: algoritmos

Dim digitos As New List(Of String)

Try

strNumero = Str(numero)

numDig = strNumero.Length

For i = 1 To numDig – 1

strDig = strNumero.Substring(i, 1)

digitos.Add(strDig)

Next

For Each ele As String In digitos

valor = valor + CInt(ele)

Next

Catch ex As Exception

Throw

End Try

Return valor

End Function

End Class

Nota: Cuando el residuo es cero(0) el dígito verificador es 0.

_______________________________--------------------_____________________------------____

VALIDACION CEDULA EN C#

Hola el siguiente es un aplicativo realizado en c# y SQL 2000 que registra el numero de horas que ha trabajado una persona que ha sido previamente registrada en la base de datos (este ejemplo utiliza una base de datos SQL Server 2000), pero con todo el script de la base de datos está adjuntado para que la puedas crear fácilmente...

Una persona cuando desea registrar sus horas de trabajo (con su cedula) la tienes primero que registrar y antes de realizar la inserción comprueba que sea un número de cédula válido, para así registrarlo en la BdD.

Utiliza además ADO.NET para la conexión con la base de datos y las diversas funcionalidades están separadas en clases

A continuación sigue código en C# nos presenta el algoritmo de validación del numero de cedula ingresado en un textbox de 10 caracteres:

public class Cedula { public bool res; public string num_cedula; public Cedula(string num) { num_cedula=num;

Page 4: algoritmos

} public void comprobar_num() { int suma=0; int j=0; bool a=true; int x=0; for(int i=0;i<9;i++) { j=Convert.ToInt16(this.num_cedula[i].ToString()); if(a==true) { x=j*2; if(x>9) { x=1+(x%10); } a=false; } else { x=j*1; a=true; } suma+=x; } x=suma%10; j=Convert.ToInt32(this.num_cedula[9].ToString()); if(x==0) { if(x==j) { res=true; } } else { x=(suma-x)+10; if(j==(x-suma)) { res=true;

} else { res=false; } } } }

No es tan complicada el entender el funcionamiento en sí del programa pero con todo cualquier comentario se los agradeceremos mucho...

Ojo que necesitas por lo menos tener un motor de SQL Server para que funcione la aplicación...

Page 5: algoritmos

 

Un saludo a todos y espero que les resulte útil...

__________________------------------------___________________------------------____________

PRECARGA DE IMAGENES

Introducción

Muchas veces nos vemos en la obligación de lanzar algún que otro tipo de ejecución en segundo plano por motivos varios y con la ayuda del objeto BackGroundWorker, una barrita de progreso y deshabilitando los controles para impedir la invocación de otros eventos se realiza una solución óptima.

Pero en una ocasión mi compañero me comentaba que necesitaba algo especial y que fuese original (o por lo menos que lo intentara).

Entonces recordé un proyecto web en el que trabajé (que si no recuerdo mal fue mi primer trabajo) y donde usaban las archiconocidas capas con trasparencia y los "cargando... , espere por favor", hoy en día muy usados en casi todas las web, y se me ocurrió la idea de aplicarlo en una aplicación WindowsForm surgiendo entonces la clase frmPreload.vb que no es más que una simple clase que lanza una animación visual sobre cualquier formulario que la invoque y donde se juega con la propiedad opacity de los controles form e impidiendo la ejecución de otros eventos hasta que no finalice el subproceso... espero que os surjan muchas ideas a partir de esta colaboración

(Un enorme saludo al equipo de desarrollo .NET de CORPME).

 

¿Como queda visualmente nuestro frmPreload.vb?

Page 6: algoritmos

Nuestro primer paso... Entender lo que realmente está sucediendo

En el ejemplo que he utilizado he creado un formulario MDI que será el encargado de lanzar el proceso en background  y de visualizar el formulario preload (de aquí en adelante frmPreload). Lo que realmente sucede es que cuando usuario invoque el evento que lanza el subproceso en background, frmpreload se superpone al formulario que le invoca quedando frmPreload ejecutándose en el hilo principal y el subproceso "costoso" en segundo plano. Con esto conseguimos que el usuario no pueda ejecutar ningún tipo de acción sobre FormMDI hasta que el subproceso haya finalizado o haya completado su ejecución.En la siguiente imagen muestro gráficamente lo que ocurre. Un formulario con opacidad, gif animado y una label descriptiva  se superpone a otro formulario.

Page 7: algoritmos

Nota:Como es lógico el frmPreload es una clase que hereda de window.form y en su constructor se encarga de localizar y “sizearse” según el tamaño del invocador, a su vez frmPreload controla si el usuario maximiza o minimiza el formulario formMDI desde la barra de tareas y deshabilita ctrl+f4. Es evidente que tan solo es algo básico y muy mejorable. Pero eso ya lo dejo en el duende de cada uno.

Dejo como ejemplo de funcionamiento de la clase frmPreload el método que se encarga de localizar al invocador y su vez centrar tanto el label como el gif de animación del frmPreload según los valores del size y del location.

Private Sub inicializarPreload(ByVal _form As System.Windows.Forms.Form)

'Supendemos el diseño

Me.SuspendLayout()

Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None

Me.ShowInTaskbar = False

'' Localizacion Inicial de los objetos

mLocationInicialPic = Me.picAjax.Location

mLocationInicialLab = Me.lbTextoPreload.Location

'' Size inicial del formpreload

mSizeInicialPreload = Me.Size

'' Aplicamos el size y location del formulario ....

Me.Size = _form.Size

Me.Location = _form.Location

'' Obtenemos el factor Localizacion con este algoritmo

factorEscalaX = (_form.Size.Width - mSizeInicialPreload.Width) / 2

factorEscalaY = (_form.Size.Height - mSizeInicialPreload.Height) / 2

Page 8: algoritmos

'' A la localizacion inicial del picture sumamos eel nuevo valor obtenido

mLocationInicialPic.X += factorEscalaX

mLocationInicialPic.Y += factorEscalaY

'' Idem a label

mLocationInicialLab.X += factorEscalaX

mLocationInicialLab.Y += factorEscalaY

'' Aplicamos nuevas localizaciones

Me.picAjax.Location = New System.Drawing.Point(mLocationInicialPic.X, mLocationInicialPic.Y)

Me.lbTextoPreload.Location = _

New System.Drawing.Point(mLocationInicialLab.X, mLocationInicialLab.Y)

'Reiniciamos el diseño

Me.ResumeLayout()

End Sub

Una vez cogida la sartén por el mango a cocinar se dijo:

Como ya hemos comprendido lo que realmente queremos simular, en nuestro ejemplo será el clic del botón nuevo fichero del formMDI el que lance nuestro proceso "costoso" y a su vez quien instancie y visualice nuestro preload

A continuación detallo alguno de los métodos y eventos encargados de instanciar y visualizar la clase frmPreload y que habría que implementar en nuestro FormMDI.

''' Como instanciar la clase frmPreload desde el evento clik de un boton y seguidamente

''' lanzar un proceso en segundo plano con el componente BackGroundWorker

Private Sub ClickBoton(ByVal sender As Object, ByVal e As EventArgs)

Handles NewToolStripMenuItem.Click, NewToolStripButton.Click

' Supendemos la logica de diseño

Me.SuspendLayout()

' Instanciamos el obj frmPreload para este invocador

wfPrecarga = New frmPreload(Me)

' Mostramos

wfPrecarga.Show()

' Forzamos la logica de diseño

Me.ResumeLayout(True)

' Obligamos a refrescar el area de diseño inmediatamente

wfPrecarga.Refresh()

Page 9: algoritmos

' Finalmente lanzamos el subhilo de ejecucion

bwPrecarga.RunWorkerAsync()

End Sub

***********************EVENTOS BACKGROUND WORKER **************************

Evento DoWork del componente BackGroundWorker

Private Sub bwPrecarga_DoWork(ByVal sender As Object, ByVal e As _

System.ComponentModel.DoWorkEventArgs)Handles bwPrecarga.DoWork

' Nota: Como yo no tengo proceso "costoso" lanzo una "iteracion dormida" cada medio segundo.

For index As Integer = 1 To 10

Threading.Thread.Sleep(500)

Next

* AQUI TU CODIGO *

End Sub

''' Evento RunWorkerCompleted

Private Sub bwPrecarga_RunWorkerCompleted(ByVal sender As Object, ByVal e As _

System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwPrecarga.RunWorkerCompleted

wfPrecarga.Dispose()

End Sub

**********************************************************************************************

Nota:Recordar que tenemos que añadir un objeto a nuestro FormMDI del tipo BackgroundWorker desde la barra de herramientas, yo en mi caso lo he llamado "bwPrecarga"

Espero haberme explicado con claridad y no haber dejado ningún tipo de duda a la hora de implementar la clase frmPreload.vb, aun así he decidido acompañarlo de un Zip con un ejemplo en funcionamiento y donde se puede ver el código completo.

Page 10: algoritmos

Danicuco 2009.

 

Espacios de nombres usados en el código de este artículo:

System.Windows.Forms

 

Compromiso del autor del artículo con el sitio del Guille:

Lo comentado en este artículo está probado (y funciona) con la siguiente configuración:

Sistema operativo:

o Windows XP SP2

IDE (entorno de desarrollo):

o Visual Studio 2008 Professional

o Visual Studio 2005 Standard

Base de datos:

o No se usa base de datos

________________________----------------------_____________________

Vamos a trabajar por pasos el primero paso por supuesto es abrir VISUAL BASIC.NET.

Page 11: algoritmos

Justo en esa imagen pueden ver como yo estoy agregando un nuevo proyecto seleccionen Aplicacion de Windows Form y le colocan un nombre en mi caso yo le coloque “Accesoadatos” ustedes le pueden colocar el nombre que quieran

Ya al tener este paso cumplido vamos a observar que no queda una panalla donde diseñar nuestro sistema con una pantalla principal llamada Form1:

Ok luego nos vamos a ir al Explorador de soluciones que es donde se van a encontrar todos los elemntos de tu proyecto de programacion para abrir el explorador de soluciones lo puedes encontrar del lado derecho o si no esta activo puedes ir al MENU ver y activas la que dice Explorador de Objetos. A lo que lo tengan activo van a presionar click derecho sobre el nombre de su solucion en mi caso fue “Accesoadatos” (presiono click derecho) y selecciono Agregar Nuevo elemento.

Page 12: algoritmos

En la lista que aparece para agregar nuevos elementos a nuestro proyecto debelos seleccionar el ojeto Base de datos basada en servicio para poder tener una base de datos donde almacenas y funciones bajo windows la otra opcion muy parecida se utiliza para base de datos para aplicaciones Moviles.. por ellos no seleccionamos bases de datos local, debes cuidar que la extension del archivo que agregas a la solucion es .MDF asi estaras mas seguro cambia el nombre de la base de datos a tu gusto en mi caso le coloque BDejemplo.mdf aqui pueder ver el ejemplo en pantalla:

al darle al boton agregar va a hacer unos procesos y va a aparecer un asistente para base de datos al cual debes darle acepar de lo contrario ese asistente creara un Dataset Tipaso propio y lo ideal es que tu sepas como agregarlo manualmente. Una vez que ya nuestra base de datos esta creada procedemos a darle desde el explorador de objetos  dos veces click a la base de datos para poder visualizar del lado izquierdo el Explorador de base de datos muy importante para crear nuestras tablas y procedimientos te fijaras que hay una parte que dice TABLAS presionando click derecho y seleccionar agregar nueva Tabla lo puedes ver en la siguiente imagen:

Page 13: algoritmos

ya al precionas podemos agregar los campos que tendra nuestra tabla para hacerlo mas sencillo vamos a agrega solo tres campos de manera que exliquemos hoy como agregar un elemento y como mostrar los datos de la tabla. Los Campos sera Cedula que sera un campo clave, nombre y apellido. Ningun va a permitir valos nulo la cedula sera de tipo numerico y nombre y apellido nvarchar(50). Lo pueden ver en la imagen:

solo queda precionar salir y te pedira que guardes la tabla con el nombre que tu quieras en mi caso le coloque alumnos,ahora procedemos a agregar unos datos de ejemplo a nuestra tabla asi como agregamos nueva tabla: le van a dar click derecho al nombre de la tabla que acaban de agregar y le dan a la Opcion Mostrar datos de tabla hay prodran agregar algunos datos de ejemplo.

Page 14: algoritmos

Solo queda presionar guardar y ahora es hora de diseñar el formulario para poder dar el ejemplo solamente se usaran los siguientes controles: Un Datagrig para mostrar los datos tres Botones uno para guardar otro para cargar los datos y otro para salir del sistema, tres textbox para agregar los tres datos de la base de datos de ejemplo y tres label para identificar a que dato corresponde cada textbox. Para ello debemos hacer uso del cuadro de herramientas para agregar los controles al formulario se puede ver del lado izquierdo y si no esta activo pueden ir al menu Ver y activar Cuadro de herramientas.

Aqui como puede observar ya he agregado los controles,  les recuerdo que .NET es Orientado a objetos y todo objeto tiene sus propiedades estados y metodos.. por ellos es importante sabes con que propiedades vamos a trabajar la mayoria de los controles encontramos en sus propiedades valga la redundacia la proiedad TEXT y la propiedad NAME text en el nombre que se va a visualizar y NAME el nombre como se reconocera programaticamente ese objeto las propiedades las podemos observar del lad Derecho al momento de seleccionar uno o varios objetos si no salen puedes ir al menu ver y activas ventana propiedades.

Page 15: algoritmos

si pueden observar modifique la propiedad TEXT  de los label para identificar que dato va en cada textbox y y los nombres de cada boton ahora vienen haciendo a la propiedad name que no va a producir ningun cambio solo lo veran mas adelante como ejemplo deben saber que cada control tiene un nombre clave para saber que tipo es por ejemplo los Label lleval LBL los textboc llevan TXT  y los botones CMD si quiero identificar los tres notones y los tres textbox programaticamente modifico la propiedad name de cada uno y usaria TXTcedula, TXTnombre. TXTapellido, CMDguardar, CMDsalir, CMDcargar y aun falta el datagrig yo personalmente le coloco DGW es decir en este caso le colocaria DGWdatos. de esta menera estaran organizados los nombres programaticamente y mas adelante veran la importancia de hacer esto.

Ahora toca agregar un sistemas de tipos a nuestro proyecto al igual que agregamos la base de datos vamos a presionar en el Explorardor de soluciones click derecho sobre el nombre de nuestro proyecto y agregar un nuevo elemento, es este caso debemos agregar un conjunto de datos que tiene extension .XSD por nombre yo le coloque DSprueba ustedes le colocal el nombre que ustedes quieran una vez que agregamos su nombre le damos agregar:

Page 16: algoritmos

una vez que agrgamos aparecera una pantalla de fondo celeste con el siguiente mensaje:

Utilice el diseñador de base de datos para trabajar con un conjunto de tablas con tipo

 Solo queda arrastras la tabla que creamos a ese diseñador de datos con tipo:

Una ves agregada nos aparecera la tabla con sus campos y en la parte de abajo metodos para buscar esos datos donde a este vamos a agregar dos consultas de las cuales una ya la tiene por defecto y la otra es para guardar los datos es decir vamos a usar sentencias TRANSAC SQL para insert y para select. quiza te sea un poco extraño esto pero poco a poco te vas acostubrando solo es cosa de practicar querer aprender y no tenerle miedo , el metodo que se agrega or defecto se llama FILL,Getdata a este metodo le vamos presionar click derecho y le damos a la opcion agregar conculta,

Page 17: algoritmos

Al presionar esta opcion tendremos un asistente que nos ayudara con esto del tractac SQL que ya les voy a explicar.. la primera opcion que sale s es que si queremos crear un sentencia SQL, un procedimiento almacenado y un procedimiento almacenado ya existente por experiencia es mejor usar procedimientos almacenados los invito a que investigues sobre ellos son recomendados en las buenas practicas de programacion y acceso a datos en si todos vamos a elegir la segunda opcion y nos saldra entonces la siguiente pantalla:

donde podran ver que la primera opcion  es un select que devuelve una fila en este caso es si quieres el valos de una o varias filas dependiento del dato que desees por ejemplo dame el dato donde la celula sea tal, en este ejemplo solo obtendras un resultado por que es imposible hayan dos personas con el mismo numero de cedula pero si fuera apelldido si es posible tener mas de dos resultados esta es la que usaremos pero ya por defecto ya esta realizado, en el segusdo caso es un Select que devuelve un solo valor: en esta opcion podran optener resultados como cuantos registros tienen en su tabla hacer una suma de una columna que contenga valores como sueldos entre otras esta no la usaremos en este caso, en el tercer caso es un UPDATE se utiliza para

Page 18: algoritmos

actualizar datos de un registri que ya existe es decir la funcion MODIFICAR, para el cuarto se trata de un DELETE logicamente se utiliza para eliminar registros de la tabla y por ultimo un INSERT es lo mismo que guardar  datos y es el que utilizaremos para darle funcion al boton guardar asi que este es el que vamos a seleccionary visualizaras luego la siguiente pantalla:

esta es la consulta o TRANSAC SQL si no estas de acuerdo con lo que el asistente hizo puedes modificarlo y personalizarlo presionando GENERADOR DE CONCULTAS. En tra ocacion explico mas profundamente esta parte al presionar generador de conculta le dan aceptar para mejorar esa consulta sql que debe quedar de esta forma para los datos que trabajo y nombre de la tabla

INSERT INTO Alumnos                         (Cedula, Nombre, Apellido)VALUES        (@Cedula,@Nombre,@Apellido)

si aparece algo mas luego de precionar aceptar sobre el generador de consulta borrenlo y deje solo esto que les coloque normalmente se agrega algo como esto

SELECT Cedula, Nombre, Apellido FROM Alumnos WHERE (Cedula = @Cedula)

y se utiliza para que luego de agregar los datos llamarlos de una vez pero en este caso no lo vamos a usar.

luego de presionar en siguiente solo les pedira el nombre del procedimiento almacenado y el nombre de la función ya listo ya tenemos nuestro diseñador de dataset con dos funciones una que se agrego por defecto llama da fill,GET y la segunda agregada por nosotros para guardar datos llamada en mi caso le coloque como nombre INSERALUM ustedes pueden colocarle el que quiera pero este nombre lo utilizaremos mas adelante. Asi nos debe quedar nuestro dataset en el diseñador.

Page 19: algoritmos

Ahora toga agregar codigo a los botones lo primero que haremos es agregar codigo al boton guardar le dareos dos veces click para ir al evento click de ese boton asi a lo que presionesmo click se ejjecutara el codigo que le coloquemos, Debemos aprender como llamar a los datos de un Dataset Tipados Basicamente hay que hacer dos instanciar de nuevo programacion orientada a objetos ests datos estas almacenados en unas clases que crea visual studio debemos llamar a esas clases para que nos permita trabajar con los metodos iseralum y FILL para ellos se agrega el siguiente codigo:

 Dim ds As New DSprueba.AlumnosDataTableDim dt As NewDSpruebaTableAdapters.AlumnosTableAdapter

 

 Quiza lo puedan ver mejor desde la imagen:

 se seclararon dos variables ds y dt dt es la que usaremos para acceder al metono inseralumn agregando el codigo

Page 20: algoritmos

 

dt.insertalum(TXTcedula.Text, TXTnombre.Text, TXTapellido.Text)

 

 

en la imagen notamos como a agregar el codigo dt.inseralum( nos ayuda a ver que valores debemos agregar pidiendonos cedula, nombre y apellido, hay es donde se justifica el por que agregar nombre programaico a cada text box ya con solo hacer esto el boton guardar funciona vamos a agrega el metodo fill al boton cargar debemos hacer lo mismo si queremos lo que hacemos es sacar las primeras dos lineas de codigo para que funcione generalmente para cualquier boton asi solo agregamos el sigiente codigo presionando dos veces click en el boton cargar.

 

dt.Fill(ds.alumnos)

DGWdatos.DataSource = ds.alumnos

 

 

 

De esta manera al presionar sobre el boton gargar el datagrig se llenara de los datos de la tabla alumnos solo falta el boton salir presiona dos veces click y presiones el codigo

Page 21: algoritmos

 

End

 

Espero les haya gusta proto les coloco el codigo completo y el para que descargen el ejemplo espero que les haya servido de mucho a quiene lo lean.

_____________________-------------------------_________________

Como validar (validación) Cuadros (campos) de Texto en Visual Basic .Net (vb)28Jan2008 Archivado en: Programación, Programas Rapidos, Visual Basic Autor: Angel López

Hola a todos.

Pues continuando con la sección de Visual Basic .Net...

¿Quién no se ha metido con el problema de que ya tienes terminado algun programa con

introducción de datos pero solo falta validar la introducción de datos mediante cuadros de

texto? y muchas veces te gustaría que existiera algo fácil y rapido que valide lo que tu

quieres...

Pues como ya es común, Visual Basic cuenta obviamente con un sistema de cachado de cada

caracter tecleado en un cuadro de texto, el cual es obtenido antes de que el caracter sea

pintado en pantalla; de esta manera tu puedes cachar el caracter cuando es presionado,

verificar si ese caracter que se esta intentando introducir es valido para tus propósitos (por

ejemplo si deseas que solo se introduzcan números, o tal vez solo vocales) y si cumple con

tus expectativas, entonces lo dejas pasar; sino entonces "bloqueas" la impresión del caracter

provocando la validación correcta de un campo de texto

Aquí te dejo un ejemplo muy sencillo pero fácilmente comprenderás como funciona...

El programa se ve así:

Page 22: algoritmos

y el código es este:

PLAIN TEXT

VB.NET:

1. Public Class Form12.     Function buscar(ByVal txtval As String, ByVal car As Char) As Boolean3.         Dim b As Integer4.         For b = 1 To txtval.Length5.             If Convert.ToChar(Mid(txtval, b, 1)) = car Then6.                 Return False7.             End If8.         Next9.         Return True10.     End Function11.  12.     Private Sub txt_KeyPress(ByVal sender As Object, ByVal e As

System.Windows.Forms.KeyPressEventArgs) Handles txt.KeyPress13.         Dim x As Char = e.KeyChar14.  15.         If x>= "0" And x <= "9" Then 'numero16.             e.Handled = False17.         Else18.             If x = Convert.ToChar(13) Then 'enter19.                 e.Handled = True20.             Else21.                 If x = Convert.ToChar(8) Then 'backspace22.                     e.Handled = False23.                 Else24.                     If buscar(txt.Text, x) = True And x = "." Then 'punto25.                         e.Handled = False26.                     Else27.                         If txt.Text.Length = 0 And (x = "+" Or x = "-") Then 'suma o

resta28.                             e.Handled = False29.                         Else30.                             e.Handled = True31.                         End If32.                     End If33.                 End If34.             End If35.         End If36.  37.     End Sub38. End Class

Explicación

Lo que tenemos aquí son dos funciones: 1 llamada buscar() que lo único que hace es recorrer

una cadena string en busca de un caracter en especifico el cual es pasado como parámetro

junto con la cadena.

La segunda función se ejecuta en el evento KeyPress del cuadro de texto, y lo que hace es

cachar el caracter precionado; aquí vemos como se cacha el caracter:

PLAIN TEXT

VB.NET:

Page 23: algoritmos

1. Dim x As Char = e.KeyChar

y después validamos a nuestro gusto... Yo en este caso lo que quiero que se introduzca es

solo numeros con signo "+" o "-" y un solo punto "."

Cualquier otro caracter introducido será omitido.

Nota: como verás tambien estoy validando que si se pueda presionar el backspace:

PLAIN TEXT

VB.NET:

1. If x = Convert.ToChar(8) Then 'backspace2.     e.Handled = False

pero el enter no tendrá ningún efecto sobre el cuadro de texto.

y lo que mencionaba sobre bloquear la impresion en pantalla del caracter tecleado se hace

igualando a false el manejador del cuadro de texto:

PLAIN TEXT

VB.NET:

1. e.Handled = False

Obviamente, para permitir que se imprima el caracter tecleado, entonces lo igualas a true.

Fácil no??

Para validar texto y números

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPressIf e.KeyChar.IsLetter(e.KeyChar) Thene.Handled = FalseElseIf e.KeyChar.IsControl(e.KeyChar) Thene.Handled = FalseElseIf e.KeyChar.IsSeparator(e.KeyChar) Thene.Handled = FalseElsee.Handled = TrueEnd IfEnd Sub

Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As _ System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPressIf e.KeyChar.IsDigit(e.KeyChar) Thene.Handled = FalseElseIf e.KeyChar.IsControl(e.KeyChar) Thene.Handled = FalseElsee.Handled = TrueEnd IfEnd Sub

Page 24: algoritmos

______________________-----------------------------------__________________________-----------------------------____

VALIDAR TEXTO

Private Sub Text1_KeyPress(ByVal sender As Object , _ByVal e As System.Windows.Forms.KeyPressEventArgs) Handless

Text1.KeyPress ' en la siguiente línea de código se comprueba si el caracter es dígito... if( not e.KeyChar.IsDigit(e.KeyChar)) Then ' de igual forma se podría comprobar si es caracter: e.KeyChar.IsLetter ' si es un caracter minusculas: e.KeyChar.IsLower ...etc If Not (e.KeyChar = Convert.ToChar(Keys.Back)) Then e.Handled = true ' esto invalida la tecla pulsada End If End IfEnd If

End Sub

VALIDAR TEXTO OK

Private Sub txtPruebaTexto_KeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) _ Handles TextBox1.KeyPress

If Char.IsLetter(e.KeyChar) Then e.Handled = False ElseIf Char.IsControl(e.KeyChar) Then e.Handled = False ElseIf Char.IsSeparator(e.KeyChar) Then e.Handled = False Else e.Handled = True End If End Sub

Page 25: algoritmos

VALIDAR NUMEROS OK

Private Sub txtPruebaNumero_KeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) _ Handles TextBox2.KeyPress

If Char.IsDigit(e.KeyChar) Then e.Handled = False ElseIf Char.IsControl(e.KeyChar) Then e.Handled = False ElseIf Char.IsSeparator(e.KeyChar) Then e.Handled = False Else e.Handled = True MsgBox("Ingrese solo numeros...", MsgBoxStyle.Exclamation, "Alerta") End If End Sub

Private Sub txtPruebaNumero_KeyPress(ByVal sender As Object, _

ByVal e As System.Windows.Forms.KeyPressEventArgs) _

Handles txtPruebaNumero.KeyPress

If Char.IsDigit(e.KeyChar) Then

e.Handled = False

ElseIf Char.IsControl(e.KeyChar) Then

e.Handled = False

ElseIf Char.IsSeparator(e.KeyChar) Then

e.Handled = False

Else

e.Handled = True

End If

End Sub

PARA LIMPIAR TEXTOPrivate Sub LimpiarTextBox(ByVal ofrm As Form)

'hace un chequeo por todos los textbox del formulario For Each oControl As Control In ofrm.Controls If TypeOf oControl Is TextBox Then oControl.Text = "" End If Next End Sub

Private Sub BtnPruebaLimpiarTextBox_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click

Call LimpiarTextBox(Me)

End Sub

'Declaramos nuestro metodo que hara la limpieza de los textbox

Private Sub LimpiarTextBox(ByVal ofrm As Form)

'hace un chequeo por todos los textbox del formulario

For Each oControl As Control In ofrm.Controls

Page 26: algoritmos

If TypeOf oCobtrol Is TextBox Then

oControl.Text = ""

End If

Next

End Sub

Private Sub BtnPruebaLimpiarTextBox_Click( _

ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles BtnPruebaLimpiarTextBox.Click

Call LimpiarTextBox(Me)

End Sub

Iniciado por luis557 Hola David e echo un programa y quisiera guardar datos de unos texbox en un fichero para poder abrirlos y que cojan el valor guardado

Gracias

Código: Sub SaveTextBoxInFile(ByVal FileName As String, ByRef Text As TextBox)On Error Resume NextCloseOpen FileName For Output As #1If Err > 0 Then Exit SubPrint #1, Text.TextCloseEnd SubSub GetFileToTextBox(ByVal FileName As String, ByRef Text As TextBox)On Error Resume NextCloseOpen FileName For Input As #1If Err > 0 Then Exit SubText.Text = Input(LOF(1), 1)CloseEnd SubPrivate Sub Command1_Click()GetFileToTextBox "C:\Texto.txt", Text1End SubPrivate Sub Command2_Click()SaveTextBoxInFile "C:\Texto.txt", Text1End Sub

Page 27: algoritmos

Por ayudar. Dejo el código que borra todos los TextBox, incluídos los que se encuentran

dentro de un GroupBox.

Aquí está:

‘Declaramos nuestro metodo que hara la limpieza de los TextBoxSub clearControls(ByVal pForm As Form)‘Hacemos un chequeo por todos los controles del FormFor Each oControl As Control In pForm.Controls‘Si un control del Form resulta ser GroupBox?????????If TypeOf oControl Is GroupBox Then‘Hacemos un chequeo por todos los controles del GroupBoxFor Each subControl As Control In oControl.Controls‘Si un control del GroupBox es un TextBox????If TypeOf subControl Is TextBox Then‘Entonces borramos su textosubControl.Text = “”End IfNextEnd If‘Si un control del Form resulta ser TexBox???????????If TypeOf oControl Is TextBox Then‘Entonces borramos su textooControl.Text = “”End IfNextEnd Sub

[email protected] matias

[email protected]

Public Sub limpiarcontroles()

Dim obj As Control

'Este procedimiento me borra las cajas de texto

For Each obj In Me.Controls            If TypeOf obj Is TextBox Then  'Cambiar esta linea para inicializar

diferentes tipos de controles                CType(obj, TextBox).Text = ""            End If        Next obj   End Sub

Page 28: algoritmos

Esto iría en el botón que llama al formulario MATEMATICA (obviamente con las variables que utilices vos)

 

(UIEjemplo es el formulario MATEMATICA EN TU CASO)

 

Dim formEjemplo As UIEjemplo

formEjemplo = New UIEjemplo()

formEjemplo.ShowDialog()

 

Y en el boton salir del formulario MATEMATICA iria esto

 

Close()

 

Saludos

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

Pon en frmatematicas un boton que diga lo siguienteMe. hide()frm_menu. show()esto te ayudara a regresar al menu.Yo te recomiendo que utilices visual studio 2010 es chevere tienes nuevos add ins.

Para limpiar los controles de un GroupBox se implementa el sigueinte procedimiento

'Procedimiento para borrar controles en un GroupBox

Private Sub Limpiar(ByVal Grupo As GroupBox, ByVal tipo As String) Dim miControl As Object

For Each miControl In Grupo.Controls If tipo = "CT" Then If miControl.GetType Is GetType(System.Windows.Forms.TextBox) Then miControl.Clear()

Page 29: algoritmos

End If End If

''' implementar para otros controles en el GroupBox Application.DoEvents() Next End Sub

y para ejecutarlo se implementa lo siguiente:

Private Sub LimpiarCajasGrupo(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdLimpiarCajasGrupo.Click Limpiar(Me.GroupBox1, "CT") End Sub

BORRAR TEXTO DE UN GROUPBOX

Dim caja as TextBoxFor Each ctrl As Control in gb.Controlscaja = TryCast(ctrl,TextBox)If Not (Caja Is Nothing) Thencaja.Clear()End IfNext ctrl

ENLAZAR A UNA WEB DESDE UN LINKLABEL

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e _As System.EventArgs) Handles MyBase.Load LinkLabel1.Text = "Click here to get more info." LinkLabel1.Links.Add(6, 4, "www.microsoft.com")End Sub

Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal _e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles _LinkLabel1.LinkClicked System.Diagnostics.Process.Start(e.Link.LinkData.ToString())End Sub

Page 30: algoritmos