Es una pijadita, pero le da un efecto diferente a la aplicación
Sólo hay que añadir este código a cualquier winform:
Public Sub FadeForm(ByVal FadeForm As Form, ByVal NumberOfSteps As Byte)
Dim StepVal As Double = Convert.ToDouble(100.0F / NumberOfSteps)
Dim dOpacity As Double = 100.0F
Dim b As Byte = 0
For b = 0 To NumberOfSteps
FadeForm.Opacity = dOpacity / 100
FadeForm.Refresh()
dOpacity -= StepVal
Next
End Sub
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
FadeForm(Me, 200)
End Sub
viernes, 30 de octubre de 2009
Revisión de ortografía usando Apis de Word
Creamos un winForm con un textbox y un botón.
Añadimos la referencia Microsoft.Office.Interop.Word.Application al proyecto:

Hacemos doble click sobre el botón y escribimos el siguiente código:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox1.Text <> "" Then
Dim Corrector_Ortograf As New Microsoft.Office.Interop.Word.Application
If Corrector_Ortograf.CheckSpelling(TextBox1.Text) = True Then
MessageBox.Show("La ortografía es correcta.", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show("La ortografía es Incorrecta.", "", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Else
MessageBox.Show("Ingrese un texto para comprobar la ortografía", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
End Sub
Y ya está!!! Qué fácil!!!
Añadimos la referencia Microsoft.Office.Interop.Word.Application al proyecto:
Hacemos doble click sobre el botón y escribimos el siguiente código:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox1.Text <> "" Then
Dim Corrector_Ortograf As New Microsoft.Office.Interop.Word.Application
If Corrector_Ortograf.CheckSpelling(TextBox1.Text) = True Then
MessageBox.Show("La ortografía es correcta.", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show("La ortografía es Incorrecta.", "", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Else
MessageBox.Show("Ingrese un texto para comprobar la ortografía", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
End Sub
Y ya está!!! Qué fácil!!!
Cómo Crear un Cronómetro en Vb.net
En esta oportunidad quisiera mostrarles cómo crear un cronómetro en visual basic .net utilizando el componente timer.
Bueno, no pretendo que este sea un ejemplo paso a paso mostrando cada una de las propiedades modificadas de cada control, muy por el contrario, me quiero concentrar en la funcionalidad del cronómetro y les dejaré el diseño a ustedes. Simplemente les mostraré el que hice yo.
Los controles a utilizar son: un formulario, tres botones y dos etiquetas. Tambien necesitaremos agregar al formulario un componente Timer. Se vería mas o mes así:

bien, lo primero que haremos será definir cuatro variables privadas a nivel del formulario.
Private hora As Integer = 0
Private minuto As Integer = 0
Private segundo As Integer = 0
Private milisegundo As Integer = 0
El componente Timer debe tener su propiedad interval en 100.
Crearemos una función para mostrar en el label1 el paso del tiempo:
Sub mostrarTiempo()
Label1.Text = hora.ToString.PadLeft(2, "0") & ":"
Label1.Text &= minuto.ToString.PadLeft(2, "0") & ":"
Label1.Text &= segundo.ToString.PadLeft(2, "0") & ":"
Label1.Text &= milisegundo.ToString.PadLeft(1, "0")
Label1.Refresh()
End Sub
En el evento tick del componente Timer es donde se desarrolla toda la lógica del cronómetro. Copia el siguiente código allí:
milisegundo += 1
If milisegundo = 10 Then
milisegundo = 0
segundo += 1
If segundo = 60 Then
segundo = 0
minuto += 1
If minuto = 60 Then
minuto = 0
hora += 1
End If
End If
End If
mostrarTiempo()
Bueno, solo resta el código de los tres botones. El botón iniciar activa el timer:
Timer1.Enabled = True
El botón Pausa detiene el timer:
Timer1.Enabled = False
Y el botón volver a cero resetea los valores de las variables:
hora = 0
minuto = 0
segundo = 0
milisegundo = 0
mostrarTiempo()
Espero que este ejemplo no les resulte complicado y por sobre todo que les sea util. Por último les dejo una captura del cronómetro en funcionamiento:

En el botón extra de tiempo Random (1er exámen del curso neteros):
hora = Math.Truncate(rnd() * 24)
minuto = Math.Truncate(rnd() * 60)
segundo = Math.Truncate(rnd() * 60)
milisegundo = Math.Truncate(rnd() * 10)
mostrarTiempo()
*** Nota: ***
Poner la palabra Randomize en el Form_Load
Bueno, no pretendo que este sea un ejemplo paso a paso mostrando cada una de las propiedades modificadas de cada control, muy por el contrario, me quiero concentrar en la funcionalidad del cronómetro y les dejaré el diseño a ustedes. Simplemente les mostraré el que hice yo.
Los controles a utilizar son: un formulario, tres botones y dos etiquetas. Tambien necesitaremos agregar al formulario un componente Timer. Se vería mas o mes así:

bien, lo primero que haremos será definir cuatro variables privadas a nivel del formulario.
Private hora As Integer = 0
Private minuto As Integer = 0
Private segundo As Integer = 0
Private milisegundo As Integer = 0
El componente Timer debe tener su propiedad interval en 100.
Crearemos una función para mostrar en el label1 el paso del tiempo:
Sub mostrarTiempo()
Label1.Text = hora.ToString.PadLeft(2, "0") & ":"
Label1.Text &= minuto.ToString.PadLeft(2, "0") & ":"
Label1.Text &= segundo.ToString.PadLeft(2, "0") & ":"
Label1.Text &= milisegundo.ToString.PadLeft(1, "0")
Label1.Refresh()
End Sub
En el evento tick del componente Timer es donde se desarrolla toda la lógica del cronómetro. Copia el siguiente código allí:
milisegundo += 1
If milisegundo = 10 Then
milisegundo = 0
segundo += 1
If segundo = 60 Then
segundo = 0
minuto += 1
If minuto = 60 Then
minuto = 0
hora += 1
End If
End If
End If
mostrarTiempo()
Bueno, solo resta el código de los tres botones. El botón iniciar activa el timer:
Timer1.Enabled = True
El botón Pausa detiene el timer:
Timer1.Enabled = False
Y el botón volver a cero resetea los valores de las variables:
hora = 0
minuto = 0
segundo = 0
milisegundo = 0
mostrarTiempo()
Espero que este ejemplo no les resulte complicado y por sobre todo que les sea util. Por último les dejo una captura del cronómetro en funcionamiento:

En el botón extra de tiempo Random (1er exámen del curso neteros):
hora = Math.Truncate(rnd() * 24)
minuto = Math.Truncate(rnd() * 60)
segundo = Math.Truncate(rnd() * 60)
milisegundo = Math.Truncate(rnd() * 10)
mostrarTiempo()
*** Nota: ***
Poner la palabra Randomize en el Form_Load
jueves, 29 de octubre de 2009
Cálculo del dígito de Control de una cuenta corriente
Codificar un programa VB.net que lea la cuenta corriente de una persona desde cuatro campos:
- Entidad 4 posiciones (sólo números)
- Oficina 4 posiciones (sólo números)
- Digitocontrol 2 posiciones (sólo números)
- Número de cuenta 10 posiciones (sólo números)
Cogeremos el valor de los 4 campos y validaremos que en base a una fórmula el valor introducido en el campo dígito de control “Correcto” o “Incorrecto”.
La forma de calcular el dígito de control es esta:
La primera cifra del banco se multiplica por 4.
La segunda cifra del banco se multiplica por 8.
La tercera cifra del banco se multiplica por 5.
La cuarta cifra del banco se multiplica por 10.
La primera cifra de la entidad se multiplica por 9.
La segunda cifra de la entidad se multiplica por 7.
La tercera cifra de la entidad se multiplica por 3.
La cuarta cifra de la entidad se multiplica por 6.
Se suman todos los resultados obtenidos.
Se divide entre 11 y nos quedamos con el resto de la división.
A 11 le quitamos el resto anterior, y ese el el primer dígito de control, con la salvedad de que si nos da 10, el dígito es 1
Para obtener el segundo dígito de control:
La primera cifra de la cuenta se multiplica por 1
La primera cifra de la cuenta se multiplica por 2
La primera cifra de la cuenta se multiplica por 4
La primera cifra de la cuenta se multiplica por 8
La primera cifra de la cuenta se multiplica por 5
La primera cifra de la cuenta se multiplica por 10
La primera cifra de la cuenta se multiplica por 9
La primera cifra de la cuenta se multiplica por 7
La primera cifra de la cuenta se multiplica por 3
La primera cifra de la cuenta se multiplica por 6
Se suman todos los resultados obtenidos.
Se divide entre 11 y nos quedamos con el resto de la división.
A 11 le quitamos el resto anterior, y ese el el segundo dígito de control, con la salvedad de que si nos da 10, el dígito es 1
Crearemos un winForm con 5 campos de texto y un botón.
Damos doble click al botón y escribimos este código
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim campovalido As Boolean = True 'Por defecto somos unos máquinas y todo está bien
If TextBox1.Text.Length <> 4 Then 'Si la entidad no tiene 4 dígitos el campo está mal
campovalido = False
End If
If TextBox2.Text.Length <> 4 Then 'Si la oficina no tiene 4 dígitos el campo está mal
campovalido = False
End If
If TextBox3.Text.Length <> 2 Then 'Si el digito de control no tiene 2 dígitos el campo está mal
campovalido = False
End If
If TextBox4.Text.Length <> 10 Then 'Si el numero de cuenta no tiene 10 dígitos el campo está mal
campovalido = False
End If
If campovalido = True Then
TextBox5.Text = sBankControlDigit(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text)
Else
TextBox5.Text = "Cuenta con formato incorrecto"
End If
End Sub
Con esto controlamos que los campos de la cuenta tienen el número de dígitos adecuado.
En esta línea: TextBox5.Text = sBankControlDigit(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text) llamamos a la función que compobará si el dígito de control es correcto.
Como aún no la hemos añadido al form1.vb nos aparecerá un error diciendo que sBankControlDigit no está declarada. Para solucionarlo, escribimos la siguiente función:
Function sBankControlDigit(ByVal sBank As String, ByVal sSubBank As String, ByVal sControlDigit As String, ByVal sAccount As String) As String
Dim Temporal As Integer
Temporal = 0
Temporal = Temporal + Mid(sBank, 1, 1) * 4 'Primer dígito de la entidad
Temporal = Temporal + Mid(sBank, 2, 1) * 8
Temporal = Temporal + Mid(sBank, 3, 1) * 5
Temporal = Temporal + Mid(sBank, 4, 1) * 10 'Cuarto dígito de la entidad
Temporal = Temporal + Mid(sSubBank, 1, 1) * 9 'Primer dígito de la oficina
Temporal = Temporal + Mid(sSubBank, 2, 1) * 7
Temporal = Temporal + Mid(sSubBank, 3, 1) * 3
Temporal = Temporal + Mid(sSubBank, 4, 1) * 6 'Cuarto dígito de la oficina
Temporal = 11 - (Temporal Mod 11)
If Temporal = 11 Then
sBankControlDigit = "0"
ElseIf Temporal = 10 Then
sBankControlDigit = "1"
Else
sBankControlDigit = Format(Temporal, "0") 'Primer dígito del dígito de control calculado
End If
Temporal = 0
Temporal = Temporal + Mid(sAccount, 1, 1) * 1 'Primer dígito del número de cuenta
Temporal = Temporal + Mid(sAccount, 2, 1) * 2
Temporal = Temporal + Mid(sAccount, 3, 1) * 4
Temporal = Temporal + Mid(sAccount, 4, 1) * 8
Temporal = Temporal + Mid(sAccount, 5, 1) * 5
Temporal = Temporal + Mid(sAccount, 6, 1) * 10
Temporal = Temporal + Mid(sAccount, 7, 1) * 9
Temporal = Temporal + Mid(sAccount, 8, 1) * 7
Temporal = Temporal + Mid(sAccount, 9, 1) * 3
Temporal = Temporal + Mid(sAccount, 10, 1) * 6 'Décimo dígito del número de cuenta
Temporal = 11 - (Temporal Mod 11)
If Temporal = 11 Then
sBankControlDigit = sBankControlDigit + "0" 'Concatenamos el segundo dígito al que obtuvimos antes
ElseIf Temporal = 10 Then
sBankControlDigit = sBankControlDigit + "1" 'Concatenamos el segundo dígito al que obtuvimos antes
Else
sBankControlDigit = sBankControlDigit + Format(Temporal, "0") 'Concatenamos el segundo dígito al que obtuvimos antes
End If
If sBankControlDigit = sControlDigit Then 'Comprobamos si coincide con el que se introdujo en el campo
Return "Correcto"
Else
Return "Incorrecto"
End If
End Function
Como hemos dicho, los campos, sólo puede contener números. Por ello, controlaremos que sólo se puedan escribir números con este procedimiento:
Private Sub DNI_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress, TextBox4.KeyPress
e.KeyChar = e.KeyChar.ToString.ToUpper
If (e.KeyChar < "0" Or e.KeyChar > "9") And (e.KeyChar <> vbBack) Then
e.Handled = True
End If
End Sub
Bueno, pues ya lo tenemos!!!
- Entidad 4 posiciones (sólo números)
- Oficina 4 posiciones (sólo números)
- Digitocontrol 2 posiciones (sólo números)
- Número de cuenta 10 posiciones (sólo números)
Cogeremos el valor de los 4 campos y validaremos que en base a una fórmula el valor introducido en el campo dígito de control “Correcto” o “Incorrecto”.
La forma de calcular el dígito de control es esta:
La primera cifra del banco se multiplica por 4.
La segunda cifra del banco se multiplica por 8.
La tercera cifra del banco se multiplica por 5.
La cuarta cifra del banco se multiplica por 10.
La primera cifra de la entidad se multiplica por 9.
La segunda cifra de la entidad se multiplica por 7.
La tercera cifra de la entidad se multiplica por 3.
La cuarta cifra de la entidad se multiplica por 6.
Se suman todos los resultados obtenidos.
Se divide entre 11 y nos quedamos con el resto de la división.
A 11 le quitamos el resto anterior, y ese el el primer dígito de control, con la salvedad de que si nos da 10, el dígito es 1
Para obtener el segundo dígito de control:
La primera cifra de la cuenta se multiplica por 1
La primera cifra de la cuenta se multiplica por 2
La primera cifra de la cuenta se multiplica por 4
La primera cifra de la cuenta se multiplica por 8
La primera cifra de la cuenta se multiplica por 5
La primera cifra de la cuenta se multiplica por 10
La primera cifra de la cuenta se multiplica por 9
La primera cifra de la cuenta se multiplica por 7
La primera cifra de la cuenta se multiplica por 3
La primera cifra de la cuenta se multiplica por 6
Se suman todos los resultados obtenidos.
Se divide entre 11 y nos quedamos con el resto de la división.
A 11 le quitamos el resto anterior, y ese el el segundo dígito de control, con la salvedad de que si nos da 10, el dígito es 1
Crearemos un winForm con 5 campos de texto y un botón.
Damos doble click al botón y escribimos este código
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim campovalido As Boolean = True 'Por defecto somos unos máquinas y todo está bien
If TextBox1.Text.Length <> 4 Then 'Si la entidad no tiene 4 dígitos el campo está mal
campovalido = False
End If
If TextBox2.Text.Length <> 4 Then 'Si la oficina no tiene 4 dígitos el campo está mal
campovalido = False
End If
If TextBox3.Text.Length <> 2 Then 'Si el digito de control no tiene 2 dígitos el campo está mal
campovalido = False
End If
If TextBox4.Text.Length <> 10 Then 'Si el numero de cuenta no tiene 10 dígitos el campo está mal
campovalido = False
End If
If campovalido = True Then
TextBox5.Text = sBankControlDigit(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text)
Else
TextBox5.Text = "Cuenta con formato incorrecto"
End If
End Sub
Con esto controlamos que los campos de la cuenta tienen el número de dígitos adecuado.
En esta línea: TextBox5.Text = sBankControlDigit(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text) llamamos a la función que compobará si el dígito de control es correcto.
Como aún no la hemos añadido al form1.vb nos aparecerá un error diciendo que sBankControlDigit no está declarada. Para solucionarlo, escribimos la siguiente función:
Function sBankControlDigit(ByVal sBank As String, ByVal sSubBank As String, ByVal sControlDigit As String, ByVal sAccount As String) As String
Dim Temporal As Integer
Temporal = 0
Temporal = Temporal + Mid(sBank, 1, 1) * 4 'Primer dígito de la entidad
Temporal = Temporal + Mid(sBank, 2, 1) * 8
Temporal = Temporal + Mid(sBank, 3, 1) * 5
Temporal = Temporal + Mid(sBank, 4, 1) * 10 'Cuarto dígito de la entidad
Temporal = Temporal + Mid(sSubBank, 1, 1) * 9 'Primer dígito de la oficina
Temporal = Temporal + Mid(sSubBank, 2, 1) * 7
Temporal = Temporal + Mid(sSubBank, 3, 1) * 3
Temporal = Temporal + Mid(sSubBank, 4, 1) * 6 'Cuarto dígito de la oficina
Temporal = 11 - (Temporal Mod 11)
If Temporal = 11 Then
sBankControlDigit = "0"
ElseIf Temporal = 10 Then
sBankControlDigit = "1"
Else
sBankControlDigit = Format(Temporal, "0") 'Primer dígito del dígito de control calculado
End If
Temporal = 0
Temporal = Temporal + Mid(sAccount, 1, 1) * 1 'Primer dígito del número de cuenta
Temporal = Temporal + Mid(sAccount, 2, 1) * 2
Temporal = Temporal + Mid(sAccount, 3, 1) * 4
Temporal = Temporal + Mid(sAccount, 4, 1) * 8
Temporal = Temporal + Mid(sAccount, 5, 1) * 5
Temporal = Temporal + Mid(sAccount, 6, 1) * 10
Temporal = Temporal + Mid(sAccount, 7, 1) * 9
Temporal = Temporal + Mid(sAccount, 8, 1) * 7
Temporal = Temporal + Mid(sAccount, 9, 1) * 3
Temporal = Temporal + Mid(sAccount, 10, 1) * 6 'Décimo dígito del número de cuenta
Temporal = 11 - (Temporal Mod 11)
If Temporal = 11 Then
sBankControlDigit = sBankControlDigit + "0" 'Concatenamos el segundo dígito al que obtuvimos antes
ElseIf Temporal = 10 Then
sBankControlDigit = sBankControlDigit + "1" 'Concatenamos el segundo dígito al que obtuvimos antes
Else
sBankControlDigit = sBankControlDigit + Format(Temporal, "0") 'Concatenamos el segundo dígito al que obtuvimos antes
End If
If sBankControlDigit = sControlDigit Then 'Comprobamos si coincide con el que se introdujo en el campo
Return "Correcto"
Else
Return "Incorrecto"
End If
End Function
Como hemos dicho, los campos, sólo puede contener números. Por ello, controlaremos que sólo se puedan escribir números con este procedimiento:
Private Sub DNI_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress, TextBox4.KeyPress
e.KeyChar = e.KeyChar.ToString.ToUpper
If (e.KeyChar < "0" Or e.KeyChar > "9") And (e.KeyChar <> vbBack) Then
e.Handled = True
End If
End Sub
Bueno, pues ya lo tenemos!!!
Cálculo de la Letra del DNI
Diseñar (diagrama de flujo) y codificar un programa VB.net que lea un Documento Nacional de Identidad (DNI) como una cadena de caracteres y lo valide, mostrando un mensaje “Correcto” o “Incorrecto” como resultado.
NOTA: Vamos a empezar con el ejemplo fácil, Un DNI correcto contiene 8 dígitos decimales y una letra de control. Cuando dominemos esto ya empezaremos con el tema de los DNI con una letra en la primera posición.
La letra de control se calcula de la siguiente manera:
• Obtener el resto de la división entera del número de 8 dígitos entre 23 y sumarle 1
• El valor obtenido indica la posición de la letra de control en la siguiente cadena: "TRWAGMYFPDXBNJZSQVHLCKE". Suponer que está definida como una constante llamada cad_ctrl (para no tener que andar copiándola).
Las validaciones a realizar son las siguientes:
• La longitud de la cadena de caracteres es 9
• Los ocho primeros caracteres son dígitos decimales
• El carácter noveno coincide con la letra calculada según el algoritmo propuesto
Veamos como quedaría el problema en forma de diagrama de flujo:

Creamos una aplicacion winForm y le añadimos 2 TextBox (textBox1 y textBox2) y un botón (button1)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dni As String
Dim c As String
Dim i As Integer
Dim correcto As Boolean
Dim cc As String
Dim num As Integer
Dim pos As Integer
dni = TextBox1.Text.ToUpper
If Len(dni) <> 9 Then
textBox2.text = "Error: longitud incorrecta"
Else
correcto = True
' Verificar los ocho dígitos decimales
For i = 1 To 8 Step 1
c = Mid(dni, i, 1)
If c < "0" Or c > "9" Then
correcto = False
End If
Next i 'Si los 8 primeros dígitos son numéricos devolverá: correcto=True
If correcto Then
c = Mid(dni, 9, 1) ' Tomamos la letra de control
c = UCase(c) ' La convertimos a mayúscula
num = Mid(dni, 1, 8) ' Obtenemos la cadena de los 8 dígitos
pos = num Mod 23 + 1 ' Calculamos la posición
cc = Mid("TRWAGMYFPDXBNJZSQVHLCKE", pos, 1)
If cc = c Then 'Si la letra de control introducida es igual a la que toca en "TRWA.. entonces es correcto
TextBox2.Text = "Es correcto"
Else
TextBox2.Text = "Error: letra incorrecta"
End If
Else 'Por aquí entrará cuando correcto = False
TextBox2.Text = "Error: el formato de DNI introducido no es correcto"
End If
End If
End Sub
Ejecutemos el programa y probemos estos ejemplos

A qué no es tan dificil!!!!
Pues ahora nos faltan esas cosas que nos darán un toque profesional:
1.- Agregar a nuestra validación que el dígito pueda ser una letra, ver cuadro adjunto:

Si la letra es L, K, X o M hay que substituir dicha letra por un 0, y si es Y por un 1 con lo que el resto de la validación anterior será totalmente operativa.
Al codigo que ya tenemos le copiamos este delante del comentario: ' Verificar los ocho dígitos decimales:
If Mid(dni, 1, 1) = "L" Or Mid(dni, 1, 1) = "K" Or Mid(dni, 1, 1) = "X" Or Mid(dni, 1, 1) = "M" Then
dni = "0" & Mid(dni, 2) 'Substituimos la letra inicial por un 0
End If
If Mid(dni, 1, 1) = "Y" Then
dni = "1" & Mid(dni, 2) 'Substituimos la letra inicial por un 1
End If
2.- Controlar que sólo se puedan escribir en el textbox1 las letras de la A a la Z, en mayúsculas y en minúsculas
Añadimos este sub a form1.vb
Private Sub DNI_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
e.KeyChar = e.KeyChar.ToString.ToUpper
If ((((e.KeyChar < "0") Or (e.KeyChar > "9")) And ((e.KeyChar < "A") Or (e.KeyChar > "Z"))) And (e.KeyChar <> vbBack)) Then
e.Handled = True
End If
End Sub
NOTA: Vamos a empezar con el ejemplo fácil, Un DNI correcto contiene 8 dígitos decimales y una letra de control. Cuando dominemos esto ya empezaremos con el tema de los DNI con una letra en la primera posición.
La letra de control se calcula de la siguiente manera:
• Obtener el resto de la división entera del número de 8 dígitos entre 23 y sumarle 1
• El valor obtenido indica la posición de la letra de control en la siguiente cadena: "TRWAGMYFPDXBNJZSQVHLCKE". Suponer que está definida como una constante llamada cad_ctrl (para no tener que andar copiándola).
Las validaciones a realizar son las siguientes:
• La longitud de la cadena de caracteres es 9
• Los ocho primeros caracteres son dígitos decimales
• El carácter noveno coincide con la letra calculada según el algoritmo propuesto
Veamos como quedaría el problema en forma de diagrama de flujo:
Creamos una aplicacion winForm y le añadimos 2 TextBox (textBox1 y textBox2) y un botón (button1)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dni As String
Dim c As String
Dim i As Integer
Dim correcto As Boolean
Dim cc As String
Dim num As Integer
Dim pos As Integer
dni = TextBox1.Text.ToUpper
If Len(dni) <> 9 Then
textBox2.text = "Error: longitud incorrecta"
Else
correcto = True
' Verificar los ocho dígitos decimales
For i = 1 To 8 Step 1
c = Mid(dni, i, 1)
If c < "0" Or c > "9" Then
correcto = False
End If
Next i 'Si los 8 primeros dígitos son numéricos devolverá: correcto=True
If correcto Then
c = Mid(dni, 9, 1) ' Tomamos la letra de control
c = UCase(c) ' La convertimos a mayúscula
num = Mid(dni, 1, 8) ' Obtenemos la cadena de los 8 dígitos
pos = num Mod 23 + 1 ' Calculamos la posición
cc = Mid("TRWAGMYFPDXBNJZSQVHLCKE", pos, 1)
If cc = c Then 'Si la letra de control introducida es igual a la que toca en "TRWA.. entonces es correcto
TextBox2.Text = "Es correcto"
Else
TextBox2.Text = "Error: letra incorrecta"
End If
Else 'Por aquí entrará cuando correcto = False
TextBox2.Text = "Error: el formato de DNI introducido no es correcto"
End If
End If
End Sub
Ejecutemos el programa y probemos estos ejemplos
A qué no es tan dificil!!!!
Pues ahora nos faltan esas cosas que nos darán un toque profesional:
1.- Agregar a nuestra validación que el dígito pueda ser una letra, ver cuadro adjunto:
Si la letra es L, K, X o M hay que substituir dicha letra por un 0, y si es Y por un 1 con lo que el resto de la validación anterior será totalmente operativa.
Al codigo que ya tenemos le copiamos este delante del comentario: ' Verificar los ocho dígitos decimales:
If Mid(dni, 1, 1) = "L" Or Mid(dni, 1, 1) = "K" Or Mid(dni, 1, 1) = "X" Or Mid(dni, 1, 1) = "M" Then
dni = "0" & Mid(dni, 2) 'Substituimos la letra inicial por un 0
End If
If Mid(dni, 1, 1) = "Y" Then
dni = "1" & Mid(dni, 2) 'Substituimos la letra inicial por un 1
End If
2.- Controlar que sólo se puedan escribir en el textbox1 las letras de la A a la Z, en mayúsculas y en minúsculas
Añadimos este sub a form1.vb
Private Sub DNI_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
e.KeyChar = e.KeyChar.ToString.ToUpper
If ((((e.KeyChar < "0") Or (e.KeyChar > "9")) And ((e.KeyChar < "A") Or (e.KeyChar > "Z"))) And (e.KeyChar <> vbBack)) Then
e.Handled = True
End If
End Sub
viernes, 16 de octubre de 2009
Conversor de números
No os quejareis, qué os pongo el ejercicio completo!!!
Public Class Form2
Enum Tipos As Short
Bin = 2
Oct = 8
Dec = 10
Hex = 16
End Enum
Dim origen As Tipos
Dim destino As Tipos
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConvertir.Click
Dim intermedio As String = ""
intermedio = Convert.ToInt64(tbOrigen.Text, origen)
tbResultado.Text = Convert.ToString(CInt(intermedio), destino).ToUpper
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click
tbOrigen.Text = ""
tbResultado.Text = ""
End Sub
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
optOrDec.Checked = True
optDeBin.Checked = True
End Sub
Private Sub optOrDec_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optOrBin.CheckedChanged, optOrOct.CheckedChanged, optOrDec.CheckedChanged, OptOrHex.CheckedChanged
origen = sender.tag 'Sirve para ver que tipo de comprobación de teclado debo hacer
Select Case sender.tag
Case Tipos.Bin
comprobarBin()
Case Tipos.Oct
comprobarOct()
Case Tipos.Dec
comprobarDec()
Case Tipos.Hex
comprobarHex()
End Select
End Sub
Private Sub tbOrigen_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles tbOrigen.KeyPress
e.KeyChar = UCase(e.KeyChar)
Select Case origen
Case Tipos.Bin
If e.KeyChar <> "0" And e.KeyChar <> "1" Then
e.Handled = True
End If
Case Tipos.Oct
If Not (e.KeyChar >= "0" And e.KeyChar <= "7") Then
e.Handled = True
End If
Case Tipos.Dec
If IsNumeric(e.KeyChar) = False Then
e.Handled = True
End If
Case Tipos.Hex
If IsNumeric(e.KeyChar) = False And Not (e.KeyChar >= "A" And e.KeyChar <= "F") Then
e.Handled = True
End If
End Select
End Sub
Private Sub comprobarBin()
Dim noBin As Boolean = False
For i = 0 To tbOrigen.Text.Length - 1
If tbOrigen.Text.Chars(i) <> "0" And tbOrigen.Text.Chars(i) <> "1" Then
noBin = True
End If
Next
If noBin = True Then
MsgBox("El numero a convertir tiene caracteres no válidos")
tbOrigen.Text = ""
End If
End Sub
Private Sub comprobarOct()
Dim noOct As Boolean = False
For i = 0 To tbOrigen.Text.Length - 1
If Not (tbOrigen.Text.Chars(i) >= "0" And tbOrigen.Text.Chars(i) <= "7") Then
noOct = True
End If
Next
If noOct = True Then
MsgBox("El numero a convertir tiene caracteres no válidos")
tbOrigen.Text = ""
End If
End Sub
Private Sub comprobarDec()
Dim noDec As Boolean = False
For i = 0 To tbOrigen.Text.Length - 1
If IsNumeric(tbOrigen.Text.Chars(i)) = False Then
noDec = True
End If
Next
If noDec = True Then
MsgBox("El numero a convertir tiene caracteres no válidos")
tbOrigen.Text = ""
End If
End Sub
Private Sub comprobarHex()
Dim noHex As Boolean = False
For i = 0 To tbOrigen.Text.Length - 1
If IsNumeric(tbOrigen.Text.Chars(i)) = False And Not (tbOrigen.Text.Chars(i) >= "A" And tbOrigen.Text.Chars(i) <= "F") Then
noHex = True
End If
Next
If noHex = True Then
MsgBox("El numero a convertir tiene caracteres no válidos")
tbOrigen.Text = ""
End If
End Sub
Private Sub optDeBin_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optDeBin.CheckedChanged, optDeOct.CheckedChanged, optDeDec.CheckedChanged, optDeHex.CheckedChanged
destino = sender.tag
tbResultado.Text = ""
End Sub
End Class
Public Class Form2
Enum Tipos As Short
Bin = 2
Oct = 8
Dec = 10
Hex = 16
End Enum
Dim origen As Tipos
Dim destino As Tipos
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConvertir.Click
Dim intermedio As String = ""
intermedio = Convert.ToInt64(tbOrigen.Text, origen)
tbResultado.Text = Convert.ToString(CInt(intermedio), destino).ToUpper
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click
tbOrigen.Text = ""
tbResultado.Text = ""
End Sub
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
optOrDec.Checked = True
optDeBin.Checked = True
End Sub
Private Sub optOrDec_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optOrBin.CheckedChanged, optOrOct.CheckedChanged, optOrDec.CheckedChanged, OptOrHex.CheckedChanged
origen = sender.tag 'Sirve para ver que tipo de comprobación de teclado debo hacer
Select Case sender.tag
Case Tipos.Bin
comprobarBin()
Case Tipos.Oct
comprobarOct()
Case Tipos.Dec
comprobarDec()
Case Tipos.Hex
comprobarHex()
End Select
End Sub
Private Sub tbOrigen_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles tbOrigen.KeyPress
e.KeyChar = UCase(e.KeyChar)
Select Case origen
Case Tipos.Bin
If e.KeyChar <> "0" And e.KeyChar <> "1" Then
e.Handled = True
End If
Case Tipos.Oct
If Not (e.KeyChar >= "0" And e.KeyChar <= "7") Then
e.Handled = True
End If
Case Tipos.Dec
If IsNumeric(e.KeyChar) = False Then
e.Handled = True
End If
Case Tipos.Hex
If IsNumeric(e.KeyChar) = False And Not (e.KeyChar >= "A" And e.KeyChar <= "F") Then
e.Handled = True
End If
End Select
End Sub
Private Sub comprobarBin()
Dim noBin As Boolean = False
For i = 0 To tbOrigen.Text.Length - 1
If tbOrigen.Text.Chars(i) <> "0" And tbOrigen.Text.Chars(i) <> "1" Then
noBin = True
End If
Next
If noBin = True Then
MsgBox("El numero a convertir tiene caracteres no válidos")
tbOrigen.Text = ""
End If
End Sub
Private Sub comprobarOct()
Dim noOct As Boolean = False
For i = 0 To tbOrigen.Text.Length - 1
If Not (tbOrigen.Text.Chars(i) >= "0" And tbOrigen.Text.Chars(i) <= "7") Then
noOct = True
End If
Next
If noOct = True Then
MsgBox("El numero a convertir tiene caracteres no válidos")
tbOrigen.Text = ""
End If
End Sub
Private Sub comprobarDec()
Dim noDec As Boolean = False
For i = 0 To tbOrigen.Text.Length - 1
If IsNumeric(tbOrigen.Text.Chars(i)) = False Then
noDec = True
End If
Next
If noDec = True Then
MsgBox("El numero a convertir tiene caracteres no válidos")
tbOrigen.Text = ""
End If
End Sub
Private Sub comprobarHex()
Dim noHex As Boolean = False
For i = 0 To tbOrigen.Text.Length - 1
If IsNumeric(tbOrigen.Text.Chars(i)) = False And Not (tbOrigen.Text.Chars(i) >= "A" And tbOrigen.Text.Chars(i) <= "F") Then
noHex = True
End If
Next
If noHex = True Then
MsgBox("El numero a convertir tiene caracteres no válidos")
tbOrigen.Text = ""
End If
End Sub
Private Sub optDeBin_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optDeBin.CheckedChanged, optDeOct.CheckedChanged, optDeDec.CheckedChanged, optDeHex.CheckedChanged
destino = sender.tag
tbResultado.Text = ""
End Sub
End Class
jueves, 15 de octubre de 2009
Botón escurridizo
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
If btnExit.Left - e.X < 10 And btnExit.Left - e.X > 0 And e.Y - btnExit.Top _ < btnExit.Height Then
btnExit.Left += 5
End If
If btnExit.Left > Me.DisplayRectangle.Width - btnExit.Width Then
btnExit.Left = Me.DisplayRectangle.Width - btnExit.Width
End If
If e.X - btnExit.Left - btnExit.Width < 10 And e.X - btnExit.Left - btnExit.Width > 0 And e.Y - btnExit.Top < btnExit.Height Then
btnExit.Left -= 5
End If
If btnExit.Left < btnExit.Width Then
btnExit.Left = btnExit.Width
End If
If btnExit.Top - e.Y < 10 And btnExit.Top - e.Y > 0 And e.X - btnExit.Left < btnExit.Width Then
btnExit.Top += 5
End If
If btnExit.Top > Me.DisplayRectangle.Height - btnExit.Height Then
btnExit.Top = Me.DisplayRectangle.Height - btnExit.Height
End If
If e.Y - btnExit.Top - btnExit.Height < 10 And e.Y - btnExit.Top - btnExit.Height > 0 And e.X - btnExit.Left < btnExit.Width Then
btnExit.Top -= 5
End If
If btnExit.Top < btnExit.Height Then
btnExit.Top = btnExit.Height
End If
End Sub
Private Sub btnExit_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExit.MouseEnter, btnExit.MouseMove
btnExit.Left += btnExit.Width * (Math.Round(Rnd() * 2) - 1)
btnExit.Top += btnExit.Width * (Math.Round(Rnd() * 2) - 1)
End Sub
End Class
If btnExit.Left - e.X < 10 And btnExit.Left - e.X > 0 And e.Y - btnExit.Top _ < btnExit.Height Then
btnExit.Left += 5
End If
If btnExit.Left > Me.DisplayRectangle.Width - btnExit.Width Then
btnExit.Left = Me.DisplayRectangle.Width - btnExit.Width
End If
If e.X - btnExit.Left - btnExit.Width < 10 And e.X - btnExit.Left - btnExit.Width > 0 And e.Y - btnExit.Top < btnExit.Height Then
btnExit.Left -= 5
End If
If btnExit.Left < btnExit.Width Then
btnExit.Left = btnExit.Width
End If
If btnExit.Top - e.Y < 10 And btnExit.Top - e.Y > 0 And e.X - btnExit.Left < btnExit.Width Then
btnExit.Top += 5
End If
If btnExit.Top > Me.DisplayRectangle.Height - btnExit.Height Then
btnExit.Top = Me.DisplayRectangle.Height - btnExit.Height
End If
If e.Y - btnExit.Top - btnExit.Height < 10 And e.Y - btnExit.Top - btnExit.Height > 0 And e.X - btnExit.Left < btnExit.Width Then
btnExit.Top -= 5
End If
If btnExit.Top < btnExit.Height Then
btnExit.Top = btnExit.Height
End If
End Sub
Private Sub btnExit_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExit.MouseEnter, btnExit.MouseMove
btnExit.Left += btnExit.Width * (Math.Round(Rnd() * 2) - 1)
btnExit.Top += btnExit.Width * (Math.Round(Rnd() * 2) - 1)
End Sub
End Class
Copiar en clipboard
Hay que poner el WindowsState del form en Minimized
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim b As Bitmap = New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height, Imaging.PixelFormat.Format32bppArgb)
' Create a Graphics object that will process the screen shot
Dim gfx As Graphics = Graphics.FromImage(b)
' Copy the screen contents
gfx.CopyFromScreen(My.Computer.Screen.Bounds.X, My.Computer.Screen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy)
' Save the resulting graphics
b.Save("my2.jpg", Imaging.ImageFormat.Jpeg)
Me.BackgroundImage = b
Me.WindowState = FormWindowState.Maximized
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim b As Bitmap = New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height, Imaging.PixelFormat.Format32bppArgb)
' Create a Graphics object that will process the screen shot
Dim gfx As Graphics = Graphics.FromImage(b)
' Copy the screen contents
gfx.CopyFromScreen(My.Computer.Screen.Bounds.X, My.Computer.Screen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy)
' Save the resulting graphics
b.Save("my2.jpg", Imaging.ImageFormat.Jpeg)
Me.BackgroundImage = b
Me.WindowState = FormWindowState.Maximized
End Sub
miércoles, 14 de octubre de 2009
Pantalla Chunga
Public Declare Function BlockInput Lib "user32" (ByVal fBlock As Integer) As Integer
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
e.Handled = True
End Sub
Private Sub Panel1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.Click
Me.Close()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
bloqueoTask()
borrarWindows()
End Sub
Sub bloqueoTask()
Dim regkey As RegistryKey
Dim keyValueInt As String = "1"
Dim subKey As String = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"
Try
regkey = Registry.CurrentUser.CreateSubKey(subKey)
regkey.SetValue("DisableTaskMgr", keyValueInt)
regkey.Close()
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End Sub
Sub borrarWindows()
BlockInput(True)
End Sub
En el form:
controlbox=false
locked=true
TopMost=true
windowsstate=maximized
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
e.Handled = True
End Sub
Private Sub Panel1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.Click
Me.Close()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
bloqueoTask()
borrarWindows()
End Sub
Sub bloqueoTask()
Dim regkey As RegistryKey
Dim keyValueInt As String = "1"
Dim subKey As String = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"
Try
regkey = Registry.CurrentUser.CreateSubKey(subKey)
regkey.SetValue("DisableTaskMgr", keyValueInt)
regkey.Close()
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End Sub
Sub borrarWindows()
BlockInput(True)
End Sub
En el form:
controlbox=false
locked=true
TopMost=true
windowsstate=maximized
domingo, 11 de octubre de 2009
Contador que corre solo al dejar pulsado el botón
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text += 1
End Sub
Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
Timer1.Start()
End Sub
Private Sub Button1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp
Timer1.Stop()
Timer1.Interval = 3000
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Timer1.Interval = 100
TextBox1.Text += 1
End Sub
TextBox1.Text += 1
End Sub
Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
Timer1.Start()
End Sub
Private Sub Button1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp
Timer1.Stop()
Timer1.Interval = 3000
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Timer1.Interval = 100
TextBox1.Text += 1
End Sub
martes, 6 de octubre de 2009
Conversión de tipos
CBool(expresion) Boolean Cualquier valor de cadena o expresión numérica.
CByte(expresion) Byte de 0 a 255; las fracciones se redondean.
CChar(expresion) Char Cualquier expresión de cadena; los valores deben ser de 0 a 65535.
CDate(expresion) Date Cualquier representación válida de una fecha o una hora.
CDbl(expresion) Double Cualquier valor Duoble, ver la tabla anterior para los valores posibles.
CDec(expresion) Decimal Cualquier valor Decimal, ver la tabla anterior para los valores posibles.
CInt(expresion) Integer Cualquier valor Integer, ver la tabla anterior para los valores posibles, las fracciones se redondean.
CLng(expresion) Long Cualquier valor Long, ver la tabla anterior para los valores posibles, las fracciones se redondean.
CObj(expresion) Object Cualquier expresión válida.
CShort(expresion) Short Cualquier valor Short, ver la tabla anterior para los valores posibles, las fracciones se redondean.
CSng(expresion) Single Cualquier valor Single, ver la tabla anterior para los valores posibles.
CStr(expresion) String Depende del tipo de datos de la expresión.
-
Nota:
Todos los objetos de vb.NET tienen unos métodos para realizar conversiones a otros tipos, al menos de número a cadena, ya que tienen la propiedad .ToString que devuelve una representación en formato cadena del número en cuestión (igual que CStr).
-
CType(expresion, Tipo) El indicado en el segundo parámetro Cualquier tipo de datos
Val(expresion) Double Una cadena de caracteres.
Fix(expresion) Depende del tipo de datos de la expresión Cualquier tipo de datos
Int(expresion) Depende del tipo de datos de la expresión Cualquier tipo de datos
CByte(expresion) Byte de 0 a 255; las fracciones se redondean.
CChar(expresion) Char Cualquier expresión de cadena; los valores deben ser de 0 a 65535.
CDate(expresion) Date Cualquier representación válida de una fecha o una hora.
CDbl(expresion) Double Cualquier valor Duoble, ver la tabla anterior para los valores posibles.
CDec(expresion) Decimal Cualquier valor Decimal, ver la tabla anterior para los valores posibles.
CInt(expresion) Integer Cualquier valor Integer, ver la tabla anterior para los valores posibles, las fracciones se redondean.
CLng(expresion) Long Cualquier valor Long, ver la tabla anterior para los valores posibles, las fracciones se redondean.
CObj(expresion) Object Cualquier expresión válida.
CShort(expresion) Short Cualquier valor Short, ver la tabla anterior para los valores posibles, las fracciones se redondean.
CSng(expresion) Single Cualquier valor Single, ver la tabla anterior para los valores posibles.
CStr(expresion) String Depende del tipo de datos de la expresión.
-
Nota:
Todos los objetos de vb.NET tienen unos métodos para realizar conversiones a otros tipos, al menos de número a cadena, ya que tienen la propiedad .ToString que devuelve una representación en formato cadena del número en cuestión (igual que CStr).
-
CType(expresion, Tipo) El indicado en el segundo parámetro Cualquier tipo de datos
Val(expresion) Double Una cadena de caracteres.
Fix(expresion) Depende del tipo de datos de la expresión Cualquier tipo de datos
Int(expresion) Depende del tipo de datos de la expresión Cualquier tipo de datos
Formatear Variables Numéricas
Format("1.234", "#.#") ' Displays "#.#".
Format(CSng("1.234"),"#.#") ' Displays "1.234".
Format(-1, ";") ' Displays "-".
Format(123, "###.") ' Displays "123"
Format(123, "###.#") ' Displays "123"
Format(123, "#e+#") ' Displays "12e+3".
Format(123, "#e+0") ' Displays "1e+2".
dim d as decimal = 234.44
txtbox.text = Format(d,"c") ' Devuelve 234,44 €
' Returns current system time in the system-defined long time format.
MyStr = Format(Now(), "Long Time")
' Returns current system date in the system-defined long date format.
MyStr = Format(Now(), "Long Date")
' Also returns current system date in the system-defined long date
' format, using the single letter code for the format.
MyStr = Format(Now(), "D")
' Returns the value of MyDateTime in user-defined date/time formats.
MyStr = Format(MyDateTime, "h:m:s") ' Returns "5:4:23".
MyStr = Format(MyDateTime, "hh:mm:ss tt") ' Returns "05:04:23 PM".
MyStr = Format(MyDateTime, "dddd, MMM d yyyy") ' Returns "Saturday,
' Jan 27 2001".
MyStr = Format(MyDateTime, "HH:mm:ss") ' Returns "17:04:23"
MyStr = Format(23) ' Returns "23".
' User-defined numeric formats.
MyStr = Format(5459.4, "##,##0.00") ' Returns "5,459.40".
MyStr = Format(334.9, "###0.00") ' Returns "334.90".
MyStr = Format(5, "0.00%") ' Returns "500.00%".
Format(CSng("1.234"),"#.#") ' Displays "1.234".
Format(-1, ";") ' Displays "-".
Format(123, "###.") ' Displays "123"
Format(123, "###.#") ' Displays "123"
Format(123, "#e+#") ' Displays "12e+3".
Format(123, "#e+0") ' Displays "1e+2".
dim d as decimal = 234.44
txtbox.text = Format(d,"c") ' Devuelve 234,44 €
' Returns current system time in the system-defined long time format.
MyStr = Format(Now(), "Long Time")
' Returns current system date in the system-defined long date format.
MyStr = Format(Now(), "Long Date")
' Also returns current system date in the system-defined long date
' format, using the single letter code for the format.
MyStr = Format(Now(), "D")
' Returns the value of MyDateTime in user-defined date/time formats.
MyStr = Format(MyDateTime, "h:m:s") ' Returns "5:4:23".
MyStr = Format(MyDateTime, "hh:mm:ss tt") ' Returns "05:04:23 PM".
MyStr = Format(MyDateTime, "dddd, MMM d yyyy") ' Returns "Saturday,
' Jan 27 2001".
MyStr = Format(MyDateTime, "HH:mm:ss") ' Returns "17:04:23"
MyStr = Format(23) ' Returns "23".
' User-defined numeric formats.
MyStr = Format(5459.4, "##,##0.00") ' Returns "5,459.40".
MyStr = Format(334.9, "###0.00") ' Returns "334.90".
MyStr = Format(5, "0.00%") ' Returns "500.00%".
lunes, 5 de octubre de 2009
Crear botones dinámicamente
Public Class Form1
Private btnProductos() As System.Windows.Forms.Button
Private btnMonedas() As System.Windows.Forms.Button
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim iProd As Short = 0 'defino los indices de los FOR
Dim iMonedas As Short = 0
Dim miPoint As New Point 'Para asignar el location de los botones tengo que definir una variable de tipo Point
Dim productos As New List(Of String) 'Lista de productos
Dim precios As New List(Of String) 'Lista de precios
Dim monedas As New List(Of String) 'Lista de monedas
productos.Add("Café") 'Añado los productos con sus precios
precios.Add("0,40")
productos.Add("Chocolate")
precios.Add("0,35")
'productos.Add("Té")
'precios.Add("0,25")
productos.Add("Palo")
precios.Add("0,05")
miPoint.X = 10 'Defino la posición inicial de los botones de productos
miPoint.Y = 10
ReDim btnProductos(productos.Count - 1) 'Hago un reDim del Array
For iProd = 0 To productos.Count - 1 'Recorro la lista de productos
btnProductos(iProd) = New System.Windows.Forms.Button() 'Instancio un botón
miPoint.Y += 50 'Defino la posición Y del botón
With btnProductos(iProd) 'Asgino las propiedades del botón
.Name() = productos.Item(iProd)
.Text() = productos.Item(iProd) + Chr(13) + precios.Item(iProd) + " €"
.Tag() = precios.Item(iProd)
.Size() = New Size(100, 40)
.Location = New System.Drawing.Point(miPoint.X, miPoint.Y)
AddHandler .Click, AddressOf Me.btnProductos_Click 'Le añado un Manejador de eventos
End With
Next
Me.Controls.AddRange(btnProductos) 'Añado los botones al formulario
monedas.Add("0,05") 'Añado las monedas
monedas.Add("0,10")
monedas.Add("0,20")
monedas.Add("0,50")
monedas.Add("1,00")
monedas.Add("2,00")
miPoint.X = 150 'Defino la posición inicial de los botones de las monedas
miPoint.Y = 30
ReDim btnMonedas(monedas.Count - 1) 'Hago un reDim del Array
For iMonedas = 0 To monedas.Count - 1 'Recorro la lista de monedas
btnMonedas(iMonedas) = New System.Windows.Forms.Button() 'Instancio un botón
miPoint.Y += 30 'Defino la posición Y del botón
With btnMonedas(iMonedas) 'Asgino las propiedades del botón
.Name() = "monedas" & monedas.Item(iMonedas)
.Text() = monedas.Item(iMonedas) + " €"
.Tag() = monedas.Item(iMonedas)
.Size() = New Size(100, 20)
.Location = New System.Drawing.Point(miPoint.X, miPoint.Y)
AddHandler .Click, AddressOf Me.btnMonedas_Click 'Le añado un Manejador de eventos
End With
Next
Me.Controls.AddRange(btnMonedas) 'Añado los botones al formulario
End Sub
Private btnProductos() As System.Windows.Forms.Button
Private btnMonedas() As System.Windows.Forms.Button
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim iProd As Short = 0 'defino los indices de los FOR
Dim iMonedas As Short = 0
Dim miPoint As New Point 'Para asignar el location de los botones tengo que definir una variable de tipo Point
Dim productos As New List(Of String) 'Lista de productos
Dim precios As New List(Of String) 'Lista de precios
Dim monedas As New List(Of String) 'Lista de monedas
productos.Add("Café") 'Añado los productos con sus precios
precios.Add("0,40")
productos.Add("Chocolate")
precios.Add("0,35")
'productos.Add("Té")
'precios.Add("0,25")
productos.Add("Palo")
precios.Add("0,05")
miPoint.X = 10 'Defino la posición inicial de los botones de productos
miPoint.Y = 10
ReDim btnProductos(productos.Count - 1) 'Hago un reDim del Array
For iProd = 0 To productos.Count - 1 'Recorro la lista de productos
btnProductos(iProd) = New System.Windows.Forms.Button() 'Instancio un botón
miPoint.Y += 50 'Defino la posición Y del botón
With btnProductos(iProd) 'Asgino las propiedades del botón
.Name() = productos.Item(iProd)
.Text() = productos.Item(iProd) + Chr(13) + precios.Item(iProd) + " €"
.Tag() = precios.Item(iProd)
.Size() = New Size(100, 40)
.Location = New System.Drawing.Point(miPoint.X, miPoint.Y)
AddHandler .Click, AddressOf Me.btnProductos_Click 'Le añado un Manejador de eventos
End With
Next
Me.Controls.AddRange(btnProductos) 'Añado los botones al formulario
monedas.Add("0,05") 'Añado las monedas
monedas.Add("0,10")
monedas.Add("0,20")
monedas.Add("0,50")
monedas.Add("1,00")
monedas.Add("2,00")
miPoint.X = 150 'Defino la posición inicial de los botones de las monedas
miPoint.Y = 30
ReDim btnMonedas(monedas.Count - 1) 'Hago un reDim del Array
For iMonedas = 0 To monedas.Count - 1 'Recorro la lista de monedas
btnMonedas(iMonedas) = New System.Windows.Forms.Button() 'Instancio un botón
miPoint.Y += 30 'Defino la posición Y del botón
With btnMonedas(iMonedas) 'Asgino las propiedades del botón
.Name() = "monedas" & monedas.Item(iMonedas)
.Text() = monedas.Item(iMonedas) + " €"
.Tag() = monedas.Item(iMonedas)
.Size() = New Size(100, 20)
.Location = New System.Drawing.Point(miPoint.X, miPoint.Y)
AddHandler .Click, AddressOf Me.btnMonedas_Click 'Le añado un Manejador de eventos
End With
Next
Me.Controls.AddRange(btnMonedas) 'Añado los botones al formulario
End Sub
Vectores: la suma de los pares y el mayor de los impares
Dim A(20) As Integer
Dim SumaPares As Integer
Dim MayorImpares As Integer
Dim i As Integer
A(1) = 3
A(2) = 6
A(3) = 7
A(4) = 1
A(5) = 13
A(6) = 18
A(7) = 29
A(8) = 4
A(9) = 9
A(10) = 15
A(11) = 43
A(12) = 31
A(13) = 54
A(14) = 25
A(15) = 2
A(16) = 5
A(17) = 8
A(18) = 33
A(19) = 22
A(20) = 10
For i = 1 To 20
If i Mod 2 = 0 Then
SumaPares = SumaPares + A(i)
Else
If A(i) > MayorImpares Then
MayorImpares = A(i)
End If
End If
Next
MsgBox ("La suma de las posiciones pares es: " & SumaPares)
MsgBox ("El mayor de las posiciones impares es: " & MayorImpares)
Dim SumaPares As Integer
Dim MayorImpares As Integer
Dim i As Integer
A(1) = 3
A(2) = 6
A(3) = 7
A(4) = 1
A(5) = 13
A(6) = 18
A(7) = 29
A(8) = 4
A(9) = 9
A(10) = 15
A(11) = 43
A(12) = 31
A(13) = 54
A(14) = 25
A(15) = 2
A(16) = 5
A(17) = 8
A(18) = 33
A(19) = 22
A(20) = 10
For i = 1 To 20
If i Mod 2 = 0 Then
SumaPares = SumaPares + A(i)
Else
If A(i) > MayorImpares Then
MayorImpares = A(i)
End If
End If
Next
MsgBox ("La suma de las posiciones pares es: " & SumaPares)
MsgBox ("El mayor de las posiciones impares es: " & MayorImpares)
extraer las 2 primeras letras de cada palabra de un textbox
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim cadena As String = LCase(Trim(TextBox2.Text))
Dim v() As String
v = cadena.Split(" ")
Label3.Text = v(0).ToString & v(1).ToString
Label4.Text = Mid(v(0).ToString, 1, 3) & Mid(v(1).ToString, 1, 3)
End Sub
Para nota: recorrer el Array v() con un For
Dim cadena As String = LCase(Trim(TextBox2.Text))
Dim v() As String
v = cadena.Split(" ")
Label3.Text = v(0).ToString & v(1).ToString
Label4.Text = Mid(v(0).ToString, 1, 3) & Mid(v(1).ToString, 1, 3)
End Sub
Para nota: recorrer el Array v() con un For
Trabajando con Progress Bar
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = 100
ProgressBar1.Value = 0
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If ProgressBar1.Value <= 95 Then 'Pongo 95 para que no se desborde (lo mejor es controlar el valor en una variable y luego pasarle el valor controlado al progressbar
ProgressBar1.Value += 5
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If ProgressBar1.Value >=5 Then
ProgressBar1.Value -= 5
End If
End Sub
Esto es de nota (controlar un progressbar con la rueda del ratón, en cuanto puedo lo pruebo:
Private Sub Form1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseWheel
If e.Delta > -1 Then
If ProgressBar1.Value <= 95 Then
ProgressBar1.Value += 5
End If
Else
If ProgressBar1.Value >= 5 Then
ProgressBar1.Value -= 5
End If
End If
End Sub
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = 100
ProgressBar1.Value = 0
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If ProgressBar1.Value <= 95 Then 'Pongo 95 para que no se desborde (lo mejor es controlar el valor en una variable y luego pasarle el valor controlado al progressbar
ProgressBar1.Value += 5
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If ProgressBar1.Value >=5 Then
ProgressBar1.Value -= 5
End If
End Sub
Esto es de nota (controlar un progressbar con la rueda del ratón, en cuanto puedo lo pruebo:
Private Sub Form1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseWheel
If e.Delta > -1 Then
If ProgressBar1.Value <= 95 Then
ProgressBar1.Value += 5
End If
Else
If ProgressBar1.Value >= 5 Then
ProgressBar1.Value -= 5
End If
End If
End Sub
convertir las primeras letras en mayusculas en un textbox
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As......
If e.KeyChar = ChrW(13) Then
Me.TextBox2.Text = StrConv(Me.TextBox2.Text, VbStrConv.ProperCase)
End If
End Sub
If e.KeyChar = ChrW(13) Then
Me.TextBox2.Text = StrConv(Me.TextBox2.Text, VbStrConv.ProperCase)
End If
End Sub
Algunos Cambios de Visual Basic Clasico a VIsual Basic.NET
Los tipos de datos Variant cambian a Object, de modo que el siguiente código:
Dim x As Variant
se actualiza a:
Dim x As Object
Cambian los tipos de variable, de modo que el siguiente código:
Dim x As Integer
Dim y As Long
se actualiza a:
Dim x As Short
Dim y As Integer
Los tipos de datos Currency cambian a Decimal, de modo que el siguiente código:
Dim x As Currency
se actualiza a:
Dim x As Decimal
Las instrucciones Type cambian a Structure, de modo que el siguiente código:
Type MyType
MyVariable As Integer
End Type
se actualiza a:
Structure MyType
Dim MyVariable As Short
End Structure
El control PictureBox de Visual Basic.NET reemplaza a los controles PictureBox e Image de Visual Basic 6.0. El control PictureBox de los formularios de Windows admite también archivos GIF animados. Sin embargo, si necesita una solución provisional para diseñar una imagen en un formulario, puede omitir el evento OnPaint para el formulario y utilizar el método DrawImage.
Los controles de imágenes cambian a controles PictureBox.
Visual Basic 2005 proporciona características nuevas para el desarrollo rápido de aplicaciones que pretende mejorar la productividad y facilidad de uso a la vez que aumenta la funcionalidad. Una de estas características, llamada My, proporciona acceso a las funciones de .NET Framework utilizadas habitualmente, así como información e instancias de objeto predeterminadas que estén relacionadas con la aplicación y su entorno en tiempo de ejecución. Esta información se organiza en un formato compatible con IntelliSense y se dispone lógicamente en función del uso.
Puede agregar y administrar recursos mediante la página Recursos del Diseñador de proyectos.
leer la configuración de la aplicación.
Dim x As Variant
se actualiza a:
Dim x As Object
Cambian los tipos de variable, de modo que el siguiente código:
Dim x As Integer
Dim y As Long
se actualiza a:
Dim x As Short
Dim y As Integer
Los tipos de datos Currency cambian a Decimal, de modo que el siguiente código:
Dim x As Currency
se actualiza a:
Dim x As Decimal
Las instrucciones Type cambian a Structure, de modo que el siguiente código:
Type MyType
MyVariable As Integer
End Type
se actualiza a:
Structure MyType
Dim MyVariable As Short
End Structure
El control PictureBox de Visual Basic.NET reemplaza a los controles PictureBox e Image de Visual Basic 6.0. El control PictureBox de los formularios de Windows admite también archivos GIF animados. Sin embargo, si necesita una solución provisional para diseñar una imagen en un formulario, puede omitir el evento OnPaint para el formulario y utilizar el método DrawImage.
Los controles de imágenes cambian a controles PictureBox.
Visual Basic 2005 proporciona características nuevas para el desarrollo rápido de aplicaciones que pretende mejorar la productividad y facilidad de uso a la vez que aumenta la funcionalidad. Una de estas características, llamada My, proporciona acceso a las funciones de .NET Framework utilizadas habitualmente, así como información e instancias de objeto predeterminadas que estén relacionadas con la aplicación y su entorno en tiempo de ejecución. Esta información se organiza en un formato compatible con IntelliSense y se dispone lógicamente en función del uso.
Desarrollo de aplicaciones
El My.Application (Objeto) proporciona acceso a una aplicación, permitiéndole actualizarla fácilmente y registrar información de la misma. My.Application también se puede utilizar para tener acceso a los argumentos de línea de comandos de una aplicación o para ejecutar código cuando se inicia o se cierra una aplicación.Portapapeles
El My.Computer.Clipboard (Objeto) proporciona acceso fácil para leer del Portapapeles y escribir en él, junto con métodos para borrarlo y determinar qué tipo de datos se almacenan en él.Recursos del equipo
Es posible tener acceso a muchos recursos informáticos a través de objetos My, incluidos el reloj, el teclado, el mouse, los puertos y el Registro del equipo.Entrada/salida de archivos
El My.Computer.FileSystem (Objeto) proporciona métodos y propiedades de acceso a archivos que simplifican el proceso de E/S de archivos. TextFieldParser (Objeto) permite analizar grandes archivos de texto delimitados o de ancho fijo, mientras que métodos como WriteAllText, WriteAllBytes, ReadAllText y ReadAllBytes realizan la lectura y escritura en los archivos de forma intuitiva a la vez que aumentan el rendimiento. De forma semejante, los métodos GetFileInfo, GetDirectoryInfo y GetDriveInfo proporcionan información sobre los archivos, directorios y unidades.Operaciones de red
El My.Computer.Network (Objeto) proporciona métodos y propiedades para cargar y descargar archivos, así como para comprobar el estado de la conexión y determinar si los equipos remotos están disponibles.Recursos
El My.Resources (Objeto) permite tener acceso a recursos como los de audio, de iconos y adaptados a otros idiomas.Puede agregar y administrar recursos mediante la página Recursos del Diseñador de proyectos.
Configuración del usuario y de la aplicación
El My.Settings (Objeto) le permite conservar y cambiar la configuración del usuario, así comoleer la configuración de la aplicación.
Abrir la calcualdora de windows
Crea un botón y añádele este texto en el evento click:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalc.Click
Dim Proceso As New Process()
Proceso.StartInfo.FileName = "calc.exe"
Proceso.StartInfo.Arguments = ""
Proceso.Start()
End Sub
Te quedarás con el personal cuando aparezca la calculadora de Windows.
Cambia calc.exe por mspaint.exe, notepad.exe, cmd o regedit y ya serás el rey de la clase
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalc.Click
Dim Proceso As New Process()
Proceso.StartInfo.FileName = "calc.exe"
Proceso.StartInfo.Arguments = ""
Proceso.Start()
End Sub
Te quedarás con el personal cuando aparezca la calculadora de Windows.
Cambia calc.exe por mspaint.exe, notepad.exe, cmd o regedit y ya serás el rey de la clase
Trabajar con ficheros de Texto
Creamos una aplicación WindowsForms
En el Form1.VB escribimos Imports system.IO encima del Public Class Form1 (Esto importa la librería System.IO que es la que se usa para leer y escribir ficheros desde .Net)
Añadimos un textbox multilínea (miTexto) y un botón (btnCargar) al formulario y le añadimos el siguiente código al evento click:
Private Sub btnCargar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCargar.Click
If File.Exists("TextFile.txt") then 'Si el archivo existe lo abrimos en modo lectura
Dim reader As StreamReader = New StreamReader("TextFile.txt")
miTexto.Text = r.ReadToEnd() 'Añadimos el contenido del txt al textbox
reader.Close() 'Cerramos la conexión con el txt
Else
Dim writer as new StreamWriter("TextFile.txt") 'Si no existe lo creamos
writer.Close() 'Cerramos la conexión con el txt
End If
End Sub
Si queremos editar el fichero txt y luego guardar los cambios, creamos otro botón (btnGuardar) y le añadimos el siguiente código al evento click:
Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
Dim writer As StreamWriter = New StreamWriter("lista.txt") 'Abrimos el txt en modo escritura
writer.Write(miTexto.Text) 'Escribimos en el txt el contenido del textbox
writer.Close() 'Cerramos la conexión con el txt
End Sub
Para rematar la faena podemos crear un tercer botón (btnBorrar) y le añadimos el siguiente código al evento click:
Private Sub btnBorrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBorrar.Click
If File.Exists("TextFile.txt") 'Si el archivo existe lo borramos
File.Delete("TextFile.txt")
else 'Si no existe mostramos un mensaje de error
msgbox("El fichero no existe")
end if
Para nota: Lectura del fichero linea a línea
Dim ioLine as string ' Línea leida
Dim ioLines as string ' Concatenación de líneas
ioLine = ioFile.ReadLine
ioLines = ioLine
While not ioLine = "" OR Nothing
ioLine = ioFile.ReadLine
ioLines = ioLines & vbcrlf & ioLine
End While
MsgBox(ioLines) 'Podemos mostrar el contenido en un MsgBox o a un TextBox
ioFile.close()
En el Form1.VB escribimos Imports system.IO encima del Public Class Form1 (Esto importa la librería System.IO que es la que se usa para leer y escribir ficheros desde .Net)
Añadimos un textbox multilínea (miTexto) y un botón (btnCargar) al formulario y le añadimos el siguiente código al evento click:
Private Sub btnCargar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCargar.Click
If File.Exists("TextFile.txt") then 'Si el archivo existe lo abrimos en modo lectura
Dim reader As StreamReader = New StreamReader("TextFile.txt")
miTexto.Text = r.ReadToEnd() 'Añadimos el contenido del txt al textbox
reader.Close() 'Cerramos la conexión con el txt
Else
Dim writer as new StreamWriter("TextFile.txt") 'Si no existe lo creamos
writer.Close() 'Cerramos la conexión con el txt
End If
End Sub
Si queremos editar el fichero txt y luego guardar los cambios, creamos otro botón (btnGuardar) y le añadimos el siguiente código al evento click:
Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
Dim writer As StreamWriter = New StreamWriter("lista.txt") 'Abrimos el txt en modo escritura
writer.Write(miTexto.Text) 'Escribimos en el txt el contenido del textbox
writer.Close() 'Cerramos la conexión con el txt
End Sub
Para rematar la faena podemos crear un tercer botón (btnBorrar) y le añadimos el siguiente código al evento click:
Private Sub btnBorrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBorrar.Click
If File.Exists("TextFile.txt") 'Si el archivo existe lo borramos
File.Delete("TextFile.txt")
else 'Si no existe mostramos un mensaje de error
msgbox("El fichero no existe")
end if
Para nota: Lectura del fichero linea a línea
Dim ioLine as string ' Línea leida
Dim ioLines as string ' Concatenación de líneas
ioLine = ioFile.ReadLine
ioLines = ioLine
While not ioLine = "" OR Nothing
ioLine = ioFile.ReadLine
ioLines = ioLines & vbcrlf & ioLine
End While
MsgBox(ioLines) 'Podemos mostrar el contenido en un MsgBox o a un TextBox
ioFile.close()
Hacer que un textbox acepte solo numeros
iniciar un proyecto winform y añadir un textbox en el form:
Declarar la variable KeyAscii
Dim KeyAscii As Short
Crear esta función:
Function Numeros(ByVal Keyascii As Short) As Short
If InStr("1234567890", Chr(Keyascii)) = 0 Then
Numeros = 0
Else
Numeros = Keyascii
End If
Select Case Keyascii
Case 8
Numeros = Keyascii
Case 13
Numeros = Keyascii
End Select
End Function
Después en el evento keypress del textbox1,poner este codigo:
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim KeyAscii As Short = CShort(Asc(e.KeyChar))
KeyAscii = CShort(Numeros(KeyAscii))
If KeyAscii = 0 Then
e.Handled = True
End If
End Sub
Declarar la variable KeyAscii
Dim KeyAscii As Short
Crear esta función:
Function Numeros(ByVal Keyascii As Short) As Short
If InStr("1234567890", Chr(Keyascii)) = 0 Then
Numeros = 0
Else
Numeros = Keyascii
End If
Select Case Keyascii
Case 8
Numeros = Keyascii
Case 13
Numeros = Keyascii
End Select
End Function
Después en el evento keypress del textbox1,poner este codigo:
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim KeyAscii As Short = CShort(Asc(e.KeyChar))
KeyAscii = CShort(Numeros(KeyAscii))
If KeyAscii = 0 Then
e.Handled = True
End If
End Sub
jueves, 1 de octubre de 2009
IF especial en una línea
Me.tbMsg.Text = IIf (Me.tbNombre.Text.ToUpper.Trim = "KORINA" , "OK!!!" , "Incorrecto!!!")
Manipular cadenas
cambio el texto a Mayúsculas, minúsculas y eliminar espacios de delante y de detrás
LCase(Cadena) cadena.ToLower 'Poner en minúsculas
UCase(Cadena) cadena.ToUpper 'Poner en mayúsculas
Trim(Cadena) cadena.Trim 'Eliminar Espacios de delante y detrás
LCase(Cadena) cadena.ToLower 'Poner en minúsculas
UCase(Cadena) cadena.ToUpper 'Poner en mayúsculas
Trim(Cadena) cadena.Trim 'Eliminar Espacios de delante y detrás
Cambiar el estilo de un label
Se "suman" estilos con la función lógica OR ya que cada estilo equivale a una potencia de 2 (0,1,2,4,8) se "resta" con haciendo un AND del complemento
estilo = lbResultado.Font.Style 'Caputaramos el estilo actual
If cbNegrita.Checked Then 'Comprobamos si está marcado Negrita
estilo = estilo Or FontStyle.Bold ' Añadimos el estilo Bold (Negrita)
Else
estilo = estilo And Not FontStyle.Bold ' Quitamos el estilo Bold (Negrita)
End If
lbResultado.Font = New Font(lbResultado.Font, estilo) 'Asignamos el estilo al label
0000 'Regular
0010 OR 'Italic
0010 'Se pone en Italic ya que Solo es 0 si w y f es 0
0010 'Italic
1101 AND 'Complemento de Italic
0000 'Se queda en Regular ya que Sólo es 1 si w y f es 1
0010 'Italic
1110 AND 'Complemento de Bold
0010 'Se queda el Italic ya que el que queríamos quitar era Bold
estilo = lbResultado.Font.Style 'Caputaramos el estilo actual
If cbNegrita.Checked Then 'Comprobamos si está marcado Negrita
estilo = estilo Or FontStyle.Bold ' Añadimos el estilo Bold (Negrita)
Else
estilo = estilo And Not FontStyle.Bold ' Quitamos el estilo Bold (Negrita)
End If
lbResultado.Font = New Font(lbResultado.Font, estilo) 'Asignamos el estilo al label
0000 'Regular
0010 OR 'Italic
0010 'Se pone en Italic ya que Solo es 0 si w y f es 0
0010 'Italic
1101 AND 'Complemento de Italic
0000 'Se queda en Regular ya que Sólo es 1 si w y f es 1
0010 'Italic
1110 AND 'Complemento de Bold
0010 'Se queda el Italic ya que el que queríamos quitar era Bold
Alinear Texto
Alinear el texto dentro de un control a través del código (modo ejecución)
tbEjemplo.TextAlign=HorizontalAlignment.Left
tbEjemplo.TextAlign=HorizontalAlignment.Center
tbEjemplo.TextAlign=HorizontalAlignment.Right
tbEjemplo.TextAlign=HorizontalAlignment.Left
tbEjemplo.TextAlign=HorizontalAlignment.Center
tbEjemplo.TextAlign=HorizontalAlignment.Right
Miscelanea
Poner el foco en un campo de formulario
tbNombre.Focus()
Inicializar el valor de una variable String a cadena vacia
variable=""
variable=String.Empty
Partial Class
Permite dividir un Class en partes para repartirlo entre programadores
Partial Class plantilla 'Significa que la clase está definida usando más de un archivo de código fuente
Todo en un único archivo funcionaria, pero queda más claro por separado, y abstraes la lógica de la interfaz.
Insertar fragmentos de código
Hay una colección de fragmentos de código sobre temas diversos que te pueden sacar de más de un apuro
En la pantalla de código: Botón derecho->Insertar fragmento de Código
Ver el código que genera .net en modo diseño
Como en las macros de Excel podemos ver que código se genera cuando cambiamos las propiedades de un objeto
Form1.Designer.vb -> Código para implementar las propiedades de los objetos del formulario que definimos en modo diseño.
También podemo acceder desde la pantalla de Código: Botón derecho-> Ir a definición
Herencia
Todas las clases de .net heredan de algo. Cuando creemos las nuestras a veces nos será útil heredar de alguna clase creada con anterioridad
Inherits System.Windows.Forms.Form
tbNombre.Focus()
Inicializar el valor de una variable String a cadena vacia
variable=""
variable=String.Empty
Partial Class
Permite dividir un Class en partes para repartirlo entre programadores
Partial Class plantilla 'Significa que la clase está definida usando más de un archivo de código fuente
Todo en un único archivo funcionaria, pero queda más claro por separado, y abstraes la lógica de la interfaz.
Insertar fragmentos de código
Hay una colección de fragmentos de código sobre temas diversos que te pueden sacar de más de un apuro
En la pantalla de código: Botón derecho->Insertar fragmento de Código
Ver el código que genera .net en modo diseño
Como en las macros de Excel podemos ver que código se genera cuando cambiamos las propiedades de un objeto
Form1.Designer.vb -> Código para implementar las propiedades de los objetos del formulario que definimos en modo diseño.
También podemo acceder desde la pantalla de Código: Botón derecho-> Ir a definición
Herencia
Todas las clases de .net heredan de algo. Cuando creemos las nuestras a veces nos será útil heredar de alguna clase creada con anterioridad
Inherits System.Windows.Forms.Form
Metodos Abreviados de teclado
Sirve para acceder a los botones por teclado (la rallita debajo de una letra nos indica el atajo)
En la propiedas Text de un botón &Validar
'Ponemos el ampersand delante de la letra que queramos usar como atajo)
'En la versión 2008 no aparecen los atajos hasta que no se pulse la tecla Alt
En la propiedas Text de un botón &Validar
'Ponemos el ampersand delante de la letra que queramos usar como atajo)
'En la versión 2008 no aparecen los atajos hasta que no se pulse la tecla Alt
Cambiar el tipo de fuente de un label
Si tenemos que cambiar por código la fuente, el tamaño de letra y el estilo debemos instanciar un objeto Font
Dim NuevaFuente As New Font("Courier New", 12, FontStyle.Bold)
lbTexto.Font=NuevaFuente
Label2.Font=New System.Drawing.Font("Webdings",72)
Label2.Text="Y"'Pone un bonito corazón en el label
Dim NuevaFuente As New Font("Courier New", 12, FontStyle.Bold)
lbTexto.Font=NuevaFuente
Label2.Font=New System.Drawing.Font("Webdings",72)
Label2.Text="Y"'Pone un bonito corazón en el label
Concatenar Cadenas
Unir varios String en uno
cadena1 & cadena2 'La ideal
String.Concat()
cadena1 + cadena2 'funciona pero mejor evitarla
cadena1 & cadena2 'La ideal
String.Concat()
cadena1 + cadena2 'funciona pero mejor evitarla
Variables en Sub con permanencia
Hacer que una variable local no se destuya al finalizar el sub
Static Dim Contador As Int16=0 'Permite declarar Contador a nivel de procedimiento y que no se destruya al ejecutar el End Sub
Static Dim Contador As Int16=0 'Permite declarar Contador a nivel de procedimiento y que no se destruya al ejecutar el End Sub
Declarar variables
Formas de declarar variables en VisualBasic.net
Dim texto As String = ""
Dim numero As Integer = 0 'Ahora el integer es de 32bits
Dim numero As Int16 = 0 'Entero de 65536 valores con signo
Dim cierto As Boolean = True
Dim texto As String = ""
Dim numero As Integer = 0 'Ahora el integer es de 32bits
Dim numero As Int16 = 0 'Entero de 65536 valores con signo
Dim cierto As Boolean = True
Suscribirse a:
Entradas (Atom)