algoritmos
Transcript of 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)
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
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;
} 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...
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?
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.
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
'' 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()
' 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.
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.
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.
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:
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.
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.
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:
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,
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
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.
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
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
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í:
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:
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
______________________-----------------------------------__________________________-----------------------------____
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
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
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
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
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
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()
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