viernes, 9 de abril de 2010

Checbox y Radiobutton

CHECKBOX

El control CheckBox se utiliza generalmente para listar opciones y que el usuario pueda elegir entre ellas, y dependiendo del valor (si está chequeado o no), se realiza una u otra acción.

Una vista previa de este control:









Propiedad Caption

La propiedad del CheckBox que visualiza el texto en el control se llama Caption. Para establecerla se realiza desde la ventana de Propiedades de Visual Basic , o en tiempo de ejecución de esta manera:

Por ejemplo si quisiéremos hacerlo en el evento Load del Formulario , DobleClick sobre el form y en el procedimiento Form_Load:

  1. Private Sub Form_Load()
  2. Check1.Caption = "Es usted mayor de edad"
  3. Check2.Caption = "¿ Tiene hijos ?"
  4. Check3.Caption = "¿ Estudió alguna carrera ?"
  5. End Sub


Propiedad Value

La principal propiedad de este control es la propiedad Value. Esta propiedad devuelve y establece el valor seleccionado.

Esta tiene 3 posibles valores:

  • 0 - UnChecked
  • 1 - Checked
  • 2 - Grayed

Las mas utilizadas son la 0 - UnChecked y 1 - Checked. Cuando está en 0 , el checkbox no está tildado o checkeado, cuando está en 1 se muestra marcado.

Siguiendo con el ejemplo anterior de la encuesta, un ejemplo que no tiene ningún sentido pero que te de una idea mas clara de como usar este control.

Agrega en un formulario 3 controles CheckBox como muestra la imagen , un botón Command1 para mostrar el resultado y un control textBox llamado Text1 para ingresar un nombre.




  1. Option Explicit
  2. Private Sub Command1_Click()
  3. ' -- Esta variable almacenará los datos para mostrar
  4. ' -- el resultado al final de la rutina
  5. Dim Resultado As String
  6. ' -- Esto verificará si el text1 no está vacio y se ha ingresado un nombre
  7. If Text1 = "" Then
  8. ' -- si está vacío mostramos el mensaje
  9. MsgBox "Debe ingresar un nombre", vbExclamation, "Encuesta"
  10. ' -- Mediante Exit Sub salimos de la rutina para
  11. ' -- no ejecutar las líneas que debajo
  12. Exit Sub
  13. End If
  14. ' -- Ahora guardamos en la Variable Resultado el nombre que
  15. ' -- se ingresó en el control text1
  16. Resultado = "Su nombre es " & Text1 & vbNewLine
  17. ' -- Evaluamos el Check1 (mayor de edad)
  18. If Check1.Value = 0 Then
  19. Resultado = Resultado & "Usted no es mayor de edad"
  20. Else
  21. Resultado = Resultado & "Usted es mayor de edad"
  22. End If
  23. ' -- Le agregamos a la variable resultado un salto de carro o salto de línea
  24. Resultado = Resultado & vbNewLine
  25. ' -- Evaluamos el Check2 (Si tiene hijos )
  26. If Check2.Value = 0 Then
  27. Resultado = Resultado & "Usted no tiene Hijos"
  28. Else
  29. Resultado = Resultado & "Usted tiene hijos"
  30. End If
  31. ' -- Otro salto de carro
  32. Resultado = Resultado & vbNewLine
  33. ' -- Evaluamos el Check3 (si estudió)
  34. If Check3.Value = 0 Then
  35. Resultado = Resultado & "Usted no estudió una Carrera"
  36. Else
  37. Resultado = Resultado & "Usted estudió una Carrera"
  38. End If
  39. ' -- Mostramos el valor de la variable Resultado con la información
  40. MsgBox Resultado, vbInformation, "Encuesta"
  41. End Sub
  42. Private Sub Form_Load()
  43. ' -- Establecer Caption de los controles
  44. Command1.Caption = "Mostrar resultados"
  45. Check1.Caption = "¿ Es usted mayor de edad ?"
  46. Check2.Caption = "¿ Tiene hijos ?"
  47. Check3.Caption = "¿ Estudió alguna carrera ?"
  48. Text1.Text = vbNullString
  49. End Sub

Otras propiedades

Las demás propiedades ya se han visto y son comunes a los demás controles de Visual Basic, como son las propiedades de aspecto gráfico y apariencia del control: Propiedad Font, Forecolor, BackColor etc...., y otras como Visible, Enabled , Top, Left, Width, Height etc...

A continuación unos ejemplos simples que no tienen mucho sentido pero sirven para practicar

Cambiar la propiedad FontBold ( Estilo negrita ) de todos los CheckBox que haya en el formulario

Colocar varios controles Check y un botón

  1. Option Explicit
  2. Private Sub Command1_Click()
  3. Static bValue As Boolean
  4. ' Variable de tipo control
  5. Dim xCheckBox As Control
  6. ' Recorrer en un bucle todos los controles del formulario actual
  7. For Each xCheckBox In Me.Controls
  8. ' Comprobar con el operador TypeOf si es un control CheckBox
  9. If TypeOf xCheckBox Is CheckBox Then
  10. ' Cambia la propiedad Bold
  11. xCheckBox.FontBold = Not bValue
  12. End If
  13. Next
  14. If bValue = False Then
  15. Command1.Caption = "Negrita"
  16. Else
  17. Command1.Caption = "Normal"
  18. End If
  19. bValue = Not bValue
  20. End Sub
  21. Private Sub Form_Load()
  22. Command1.Caption = "Normal"
  23. End Sub

Cambiar la propiedad Value de todos los CheckBox que haya en el formulario

Colocar varios controles CheckBox y un Command

  1. Option Explicit
  2. Private Sub Command1_Click()
  3. Static bValue As Boolean
  4. bValue = Not bValue
  5. Dim xCheckBox As Control
  6. ' Recorrer en un bucle todos los controles del form
  7. For Each xCheckBox In Me.Controls
  8. ' Comprobar con el operador TypeOf si es un control CheckBox
  9. If TypeOf xCheckBox Is CheckBox Then
  10. ' Cambiar la propiedad Value
  11. xCheckBox.Value = Abs(bValue)
  12. End If
  13. Next
  14. Command1.Caption = "Value: " & CStr(bValue)
  15. End Sub
  16. Private Sub Form_Load()
  17. Command1.Caption = "Value: Falso"
  18. End Sub


Propiedad Style

Una propiedad de este control relacionado a su aspecto gráfico es la Propiedad Style:

Esta es similar a la del control CommandButton, y permite tener un checkBox de estilo gráfico o estilo Estándar normal, como muestra esta imagen:







Si está en Graphical, es posible cambiarle el color de fondo y también si queremos podemos mostrar una imagen utilizando la propiedad Picture del Check

Eventos del Control CheckBox

El principal evento del control CheckBox es el evento Click. Si colocas un checkBox en un formulario y le das DobleClick, podés ver que VisualBasic abre la ventana de código y te crea un procedimiento de evento como este:

  1. Private Sub Check1_Click()
  2. End Sub

Todas las instrucciones que estén en este bloque , se producirán cuando hagamos un click en dicho control:

Un ejemplo

Agrega 1 CheckBox. Luego pega el siguiente código, que lo que hace es que cada ves que se presione, muestre el valor de su propiedad Value. Para poder convertir el valor de Value, que puede ser un 1 o un 0 y a "Verdadero" o "Falso" utilizamos la función CBool que lo que hace es Convertir una expresión a un valor de tipo Boolean.

  1. Option Explicit
  2. Private Sub Check1_Click()
  3. ' -- Mostramos el valor de la propiedad Value del Check1
  4. MsgBox CBool(Check1.Value)
  5. End Sub

Descripción de los demás eventos

  • DragDrop: Ocurre cuando finaliza una operación de arrastrar y colocar.
  • DragOver: Ocurre cuando la operación de arrastrar y colocar está en curso.
  • GotFocus: Ocurre cuando el checkBox recibe el enfoque
  • LostFocus : Ocurre cuando el checkBox pierde el enfoque.
  • KeyDown: Ocurre al presionar una tecla mientras el checkBox tiene el enfoque.
  • KeyPress : Ocurre al presionar y liberar una tecla ANSI.
  • KeyUp : Ocurre cuando se libera una tecla mientras el checkBox tiene el enfoque.
  • MouseDown : Cuando el usuario presiona el botón del mouse mientras el checkBox tiene el enfoque.
  • MouseUp: Cuando se libera el botón del mouse mientras tiene el enfoque.
  • Validate : Ocurre cuando el control checkBox pierde el enfoque en favor de un control que produce una validación.

Ejemplos de eventos

Lo siguiente, utiliza el evento MouseMove del control, para que al pasar el mouse por encima, se visualice una descripción en un control de barra de estado. También, hace un simple efecto, cambiando el color del texto, similar al enlace de una página web.

Coloca en el formulario un control Check1, un control StatusBar, y el siguiente código fuente.

  1. Option Explicit
  2. ' -- Flag
  3. Private bMouseEnter As Boolean
  4. ' -- Cambiar color del texto al cambiar el value
  5. ' ------------------------------------------------------
  6. Private Sub Check1_Click()
  7. With Check1
  8. If .Value = 0 Then .ForeColor = vbBlack
  9. If .Value = 1 Then .ForeColor = vbRed
  10. End With
  11. End Sub
  12. Private Sub Check1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  13. If bMouseEnter = False Then
  14. bMouseEnter = True
  15. ' -- Resaltar texto y mostrar la descripción en la barra de estado
  16. Call CambiarPropiedad(Check1, True)
  17. StatusBar1.Panels(1).Text = "Un texto descriptivo ...."
  18. End If
  19. End Sub
  20. Private Sub Form_Load()
  21. ' -- Propiedades de la barra de estado
  22. With StatusBar1
  23. .Style = sbrNormal ' -- Estilo
  24. .Panels(1).AutoSize = sbrSpring ' -- ajustar al ancho
  25. End With
  26. ' -- Propiedades iniciales de la fuente
  27. With Check1
  28. .FontName = "Verdana"
  29. .FontSize = 12
  30. .FontBold = True
  31. End With
  32. End Sub
  33. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  34. If bMouseEnter Then
  35. bMouseEnter = False
  36. ' -- Volver a colocar el texto normal
  37. Call CambiarPropiedad(Check1, False)
  38. StatusBar1.Panels(1).Text = ""
  39. End If
  40. End Sub
  41. Private Sub CambiarPropiedad(CheckBox As CheckBox, bMouse As Boolean)
  42. With CheckBox
  43. If bMouse Then
  44. ' subrayar el texto y colocarlo en azul
  45. .ForeColor = vbBlue
  46. .FontUnderline = True
  47. Else
  48. ' texto normal
  49. If .Value = 0 Then .ForeColor = vbBlack
  50. If .Value = 1 Then .ForeColor = vbRed
  51. .FontUnderline = False
  52. End If
  53. End With
  54. End Sub


Ejemplo para crear un CheckBox propio mediante controles Image

Este ejemplo para descargar es muy simple y muestra como se puede crear un control Check utilizando gráficos personalizados, es decir creado por nosotros, como muestra la imagen:








El ejemplo está hecho con dos controles image, uno llamado ImageCheck, que tiene cargado el gráfico para mostrar el valor checkeado, el otro control Image llamado ImageUncheck, tiene el otro gráfico sin el check. Luego al presionar los controles Image, en el evento click, si el ImageUncheck está visible, se oculta, si está invisible se visualiza, y los mismo con el otro image.

Descargar ejemplo


Tomar la apariencia de los temas de windows

Como habrás notado, cuando creas el ejecutable de tu programa, el control checkBox y resto de controles del formulario, no visualizan los temas que tenga presente windows. Para poder visualizarlos con el tema presente que se encuentre actualmente activado , y de esta manera el programa tenga una mejor interfaz gráfica, se utiliza un archivo Manifest.

En este enlace hay un ejemplo que puedes utilizar para realizar esto : Aplicar el tema de windows a controles del programa


Crear Array de controles CheckBox en tiempo de ejecución

Para poder crear array de controles en Visual basic en tiempo de ejecución, es muy simple y en muchas ocaciones es fundamental su utilización. En el siguiente enlace puedes ver un ejemplo. ( El ejemplo no es para CheckBox pero sirve de todas formas ) Ver ejemplo


Crear matrices de controles

El uso de los arreglos de controles, o también llamados matrices de controles, son fundamentales en el uso en la mayoría de los programas. Estos son fáciles de implementarlos, permiten optimizar código, facilitar las tareas de codificación , optimización de recursos del programa, y muchas otras ventajas . En el siguiente enlace puedes ver un ejemplo de como crearlos : Arreglos de controles en vb

Listbox

LISTBOX

El control ListBox permite añadir elementos en forma de lista y también poder seleccionar elementos de la misma para trabajar los datos.

Este control permite seleccionar un elemento solo o varios de ellos, utilizando la propiedad Multiselect. La imagen de la izquierda muestra un ListBox en el que se selecciona un solo elemento y a la derecha se seleccionan varios:





Para agregar elementos a un control ListBox en tiempo de diseño, se debe seleccionar el control Listbox, y desde la ventana de propiedades ubicarnos en la que se llama List. Al desplegarla podemos agregar y remover elementos.

Para esto se debe ingresar uno, luego mantener la tecla Ctrl presionada y presionar Enter, y agregar el siguiente y asi con los demás.

Para agregarlos en tiempo de ejecución, es decir mediante código, se utiliza un método llamado AddItem.

Por ejemplo si quisiéramos agregar un elemento a un control llamado List1 en el evento Click de un botón, debemos escribir el nombre del ListBox y presionar el ".". Visual Basic desplegará la lista de propiedades y métodos del control List, en ella buscamos el método AddItem, como muestra la imagen:












El método AddItem tiene 2 parámetros.

AddItem "Elemento que vamos a agregar", "Index (posición)"

El primer parámetro es obligatorio, y es el elemento que vamos a añadir al control List. El segundo parámetro no es obligatorio, es decir es opcional, y permite especificar el lugar donde añadir el elemento, es decir la posición. A este se le pasa un número entero, por ejemplo 0, 1, 5 etc...Si no se especifica una posición, el elemento que se agrega es añadido al final de la lista.

Por ejemplo, si quisiera agregar 5 nombres de países en un control llamado List1, cuando presionamos un Command1 :

Private Sub Command1_Click()

List1.AddItem "Brasil"
List1.AddItem "Francia"
List1.AddItem "Italia"
List1.AddItem "Argentina"
List1.AddItem "venezuela"


End Sub

Al probar lo anterior, Visual Basic no dió error al no indicar la posición o el parámetro Index, ya que como se dijo dicho parámetro es opcional.

Para eliminar un elemento se utiliza el método RemoveItem. Este método tiene un parámetro llamado Index en el cual debemos indicar la posición del elemento que vamos a eliminar.

Por ejemplo:

Private Sub Command2_Click()

'Eliminamos el elemento 2 de la lista
List1.RemoveItem 2

End Sub

El ejemplo anterior eliminaría de la lista el elemento "Italia". Te preguntarás porque elimina a "Italia" si este está en la posición 3. En realidad está en la posición 2, ya que se comienza el conteo desde el 0, es decir en la lista del ejemplo anterior, "Brasil" tiene el número 0, "Francia" el 1, "Italia" el 2 etc...

Importante: Al eliminar un elemento de la lista, el número relacionado al elemento o Item a eliminar, debe estar en la lista, ya que si no daría un error al querer eliminar un Item que no se encuentra.

Ejemplo simple para agregar y eliminar elementos de un control List

Para el siguiente ejemplo colocar los siguientes controles en un formulario como está en la imagen:





Un control Label1 y en el Caption escribir "Nombre". Un Command1 y en el Caption "Añadir". Al Command2 "Eliminar Seleccionado". Luego agrega un Text1 al lado del control Label1 y un control List1.

El elemento que escribamos en el Text1, cuando se presione " Añadir " se agregará al control List1, cuando presionemos el Command2 se eliminará de la lista el elemento que se encuentre seleccionado.

Colocar el código en el formulario:

Private Sub Command1_Click()
If Text1 = "" Then
MsgBox "Debe ingresar un nombre para poder agregar un elemento", vbQuestion + vbOKOnly, "Datos incompletos"
'Salimos de la rutina ya que no se ha ingresado nada en el control text1
Exit Sub
End If

'Agregamos el contenido del Text1 en el control List1
List1.AddItem Text1
End Sub

Private Sub Command2_Click()
'Si la lista no está vacía entonces podemos eliminar
If List1.ListIndex <> -1 Then
'Eliminamos el elemento que se encuentra seleccionado
List1.RemoveItem List1.ListIndex
End If
End Sub

En el ejemplo anterior cuando se presiona añadir, antes de utilizar el método AddItem para añadir el contenido del Text1, se comprueba mediante un IF que el Text1 no está vacío. Si está vacío se muestra un mensaje de error y se sale de la rutina mediante Exit sub. Si se ha ingresado algún texto, ignora la cláusula IF Then y ejecuta la línea que añade el Item.

En el botón de Eliminar el elemento seleccionado se utilizan una propiedad que no se comentó llamada ListIndex. Esta propiedad nos devuelve el número del elemento que se encuentra seleccionado actualmente. Cuando el ListBox no tiene ningún elemento seleccionado, el valor de ListIndex es de -1. Para que no de error al querer eliminar un elemento que no se encuentre seleccionado, primero debemos comprobar que el valor de ListIndex es distinto a -1, por ejemplo

If List1.ListIdex <> -1 Then ....

Si el valor es distinto a -1 quiere decir que hay un elemento seleccionado, entonces se procede a la eliminación del mismo, utilizando el método RemoveItem pasándole como parámetro el número de ListIndex.

Propiedad Sorted:

Si quisiéramos ordenar el contenido, es decir los elementos del control List en forma alfabética, debemos utilizar la propiedad Sorted.

Esta propiedad no se puede utilizar en tiempo de ejecución, si no que la debemos establecer en tiempo de diseño desde la ventana de propiedades. Si la propiedad está en True, la lista de elementos se mostrará en forma ordenada, si está en False sin ordenar. Por defecto esta propiedad está con el Valor False.

Eliminar elementos con el método Clear

Para eliminar todo el contenido de un control ListBox se utiliza el método o función llamado Clear.

Por ejemplo:

Private Sub Command1_Click()

'Elimina todo el contenido del ListBox
List1.Clear

End Sub

Este método no necesita ningún parámetro, solo ejecutarlo para que todo el contenido del control sea eliminado. Tampoco produce un error si ejecutamos Clear y el ListBox no tiene elementos, es decir si los tiene los elimina, si no tiene elementos y se ejecuta Clear, no ocurre nada.

Propiedad ListCount

La propiedad ListCount devuelve la cantidad de elementos que contiene el control.

Por ejemplo, en las siguientes líneas, cuando se presiona un Command1, se agregan 3 elementos. Luego se muestra un mensaje, mediante un MsgBox, con la cantidad de elementos del control, consultando el valor de la propiedad ListCount :

Private Sub Command1_Click()

'Agregamos 3 elementos al listado
List1.AddItem "Enero"
List1.AddItem "Febrero"
List1.AddItem "Marzo"


'Mostramos medianete un mensaje la cantidad de elementos
'del contenido del ListBox, en este caso devuelve 3

MsgBox List1.ListCount

End Sub

Propiedad List

La propiedad List devuelve o establece los elementos contenidos en la lista del control.

Esta propiedad lleva un parámetro que indica el número del elemento que se quiere consultar.

Un ejemplo: si quisiera mostrar en un Label1 el texto del elemento que se selecciona, haríamos lo siguiente:

Colocar un List1 y un Label1. Pegar esto en el formulario:

Private Sub Form_Load()
'Agregamos 3 elementos al listado
List1.AddItem "Enero"
List1.AddItem "Febrero"
List1.AddItem "Marzo"
End Sub

Private Sub List1_Click()
'Cuando hacemos Click en un elemento del List1 _
mostramos en el Label1 el texto del elemento

Label1 = List1.List(List1.ListIndex)
End Sub

En el código anterior, cuando carga el formulario en el evento Load, se agregan 3 elementos cualquiera. El restante código se encuentra en el evento Click del control List, por eso se ejecutará cada vez que hagamos un Click en el mismo, y utilizando la propiedad List y pasándole otra propiedad ya vista " ListIndex ", obtenemos el texto del elemento actualmente seleccionado.

Si pasáramos un número, nos mostraría el texto del elemento que corresponde a ese número dentro del ListBox. Siguiendo el ejemplo anterior en el que teníamos 3 elementos, si se hiciera esto

Private Sub List1_Click()
Label1 = List1.List(2)
End Sub

...el control Label1 mostraría el texto del elemento 2, que sería "Marzo". Esto como ya se indicó antes es porque el primer elemento en la lista es el 0, que en este caso corresponde a "Enero", el segundo elemento es el 1, en este caso "Febrero" , etc...

While

WHILE

While :
Puede ocurrir que se desee ejecutar un bloque de instrucciones desconociendo el número exacto de veces que se ejecutan.

Para estos casos existen en la mayoría de los lenguajes de programación estructurada las estructuras de control iterativas condicionales.

Como su nombre lo indica las acciones se ejecutan dependiendo de la evaluación de la condición.

Estas estructuras se clasifican en pre-condicionales y post-condicionales

Las estructuras iterativas pre-condicionales primero evalúan la condición y si es verdadera se ejecuta el bloque de acciones. Dicho bloque se pueda ejecutar 0, 1 ó más veces.
Importante: el valor inicial de la condición debe ser conocido o evaluable antes de la evaluación de la condición.

otro ejemplo:
{en la variable suma se guarda el resultado de la suma de los números ingresados}
{ inicializa la variable suma }
suma := 0;
writeln ( "Ingrese un número entero:" );
{ la variable numero toma valor que luego utiliza como evaluar la condición
por primera vez}
readln ( numero );
while ( numero <> 0 ) do begin
suma := suma + numero;
writeln ( "Ingrese un número entero:" );
{ la variable número toma otro valor que utilizará como nueva condición }
read ( numero );
end;
writeln ( "El resultado de la suma es:", suma );
{ en suma se acumula la suma de los números leídos }

For

FOR

For :Consiste en repetir N veces un bloque de acciones.

Este número de veces que se deben ejecutar las acciones es fijo y conocido de antemano.

para que tengas encuenta:
*La variable de control debe ser de tipo ordinal
*no debe modificarse dentro del lazo.
*Los incrementos ó decrementos y testeos son implícitos
*Al terminar el ciclo, la variable índice no tiene un valor definido (su uso se limita a la repetición).

un ejemplo pequeño

For i=1 to 10

num = num + i

next

Picture box


PICTURE BOX

El control PictureBox se utiliza para mostrar y cargar archivos de imagen, también para dibujar figuras mediante los métodos gráficos , y también como control contenedor de otros controles, como los controles Frame

Vista de un picturebox con un gráfico cargado




Propiedad Picture

La principal propiedad del control PictureBox se llama precisamente Picture.

Esta propiedad es la que indica el gráfico que estará cargado. Para cargar un gráfico en visual basic desde el disco, se usa la función LoadPicture. A Esta función le debemos indicar como parámetro la ruta del fichero

Por ejemplo si quisiera cargar un archivo de imagen llamado paisaje.jpg que está ubicado en la unidad c:, y que se cargue cuando le damos un click a un CommandButton, tendriamos que hacer esto:

  1. Option Explicit
  2. Private Sub Command1_Click()
  3. ' -- Le indicamos al método LoadPicture la ruta del gráfico
  4. With Picture1
  5. .Picture = LoadPicture("c:\paisaje.jpg")
  6. End With
  7. End Sub

De esta manera estamos cargando el archivo en tiempo de ejecución. Se dice tiempo de ejecución ya que el archivo lo estamos cargando cuando está corriendo el programa. En cambio si quisiéramos cargar el archivo gráfico en tiempo de diseño, tendríamos que seleccionar el control Picture que colocamos en el formulario, ir a la ventana de propiedades de Visual basic, buscar la propiedad Picture, y seleccionar mediante un cuadro de diálogo de windows, buscarlo en la Pc, y cargar el archivo que queramos. Luego de hacer esto, automáticamente se cargaría la imagen en el control.

Nota : El archivo de imagen, Debe ser obligatoriamente un gráfico gif, jpg, bmp, ico, cur . No asi otros formatos, como por ejemplo el PNG, o Tiff. ( Aunque se puede leer estos formatos, pero mediante otras técnicas, utilizando el api de windows )

En este enlace podés descargar un ejemplo que permite mediante el api de windows poder ver archivos Png en visual basic en un control Picture o Formulario

Ahora ¿ Cómo borrar en tiempo de ejecución la imagen cargada y dejar el Picture vacío ?

Muy simple, debemos hacer lo siguiente:

  1. Option Explicit
  2. Private Sub Command1_Click()
  3. ' -- Le indicamos una ruta o path vacío para eliminar la imagen del PictureBox
  4. With Picture1
  5. .Picture = LoadPicture("")
  6. End With
  7. End Sub

Otra forma de eliminar la imagen es mediante la palabra reservada de vb Nothing.

  1. ' -- Eliminar la imagen mediante la palabra reservada Nothing de vb
  2. With Picture1
  3. .Picture = Nothing
  4. End With

Una cosa importante es que al utilizar LoadPicture para cargar una imagen, cuando le pasamos la ruta del archivo, el path debe ir entre comillas, y obviamente el path debe ser una ruta a un archivo existente, de lo contrario Visual Basic produciría un error al intentar cargar un archivo que no existe. Si te llegara a dar un error comprueba que escribiste bien la ruta y que el archivo está realmente ubicado allí.

Una forma de comprobar la ruta es mediante un controlador de error de la siguiente forma:

Colocar un Botón en el formulario y un Picture

  1. Option Explicit
  2. ' -- Botón que carga una imagen que no existe para recrear el error
  3. ' --------------------------------------------------------------------------------
  4. Private Sub Command1_Click()
  5. On Error GoTo error_handler
  6. ' -- Esto generará un error ya que la ruta no es válida.
  7. ' -- Luego al producirse el error, se ejecutará el cuadro de mensaje
  8. ' -- ubicado en la etiqueta error_handler, mostrarando la descripción del error
  9. With Picture1
  10. .Picture = LoadPicture("una ruta inválida")
  11. End With
  12. Exit Sub
  13. error_handler:
  14. ' -- error 53 - Ruta inválida
  15. If Err.Number = 53 Then
  16. MsgBox "La ruta no es válida. Verifique el archivo", vbCritical, "Error"
  17. ' -- otros errores
  18. Else
  19. MsgBox Err.Description, vbCritical
  20. End If
  21. End Sub
  22. Private Sub Form_Load()
  23. Command1.Caption = "Cargar imagen en picbox"
  24. End Sub


Propiedad Autosize

Esta propiedad lo que hace es adaptar o ajustar el control a las dimensiones del gráfico cargado.

Los posibles valores que le podemos dar son True o False. Si le pasamos True el control se autoajusta al tamaño de la imagen, si le pasamos False el control queda con el ancho y alto sin autoajustarse al gráfico

Esta captura muestra esto mismo, el Picture de la izquierda tiene la propiedad Autosize en False, mientras que el otro la tiene en True.

Select case

SELECT CASE

Ejecuta uno de varios grupos de instrucciones, según el valor de una expresión.

Select [ Case ] testexpression

[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Partes

testexpression

Obligatorio. Expresión. Debe evaluarse en uno de los tipos de datos elementales (Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, SByte, Short, Single, String, UInteger, ULong y UShort).

expressionlist

Requerido en una instrucción Case. Lista de cláusulas de expresiones que representan valores que coinciden para testexpression. Las cláusulas de varias expresiones se separan mediante comas. Cada cláusula puede tomar una de las siguientes formas:

  • expression1 To expression2

  • [ Is ] comparisonoperator expression

  • expression

Utilice la palabra clave To para especificar los límites de un intervalo de valores que coinciden para testexpression. El valor de expression1 debe ser menor o igual que el valor de expression2.

Utilice la palabra clave Is con un operador de comparación (=, <>, <, <=, > o >=) para especificar una restricción de los valores coincidentes para testexpression. Si no se escribe la palabra clave Is, se insertará automáticamente antes de comparisonoperator.

La forma que especifica únicamente expression se considera un caso especial de la forma Is, donde comparisonoperator es el signo igual (=). Esta forma se evalúa como testexpression = expression.

Las expresiones contenidas en expressionlist pueden ser de cualquier tipo de datos, siempre que sean implícitamente convertibles al tipo de testexpression y el correspondiente comparisonoperator sea válido para los dos tipos con los que se utilice.

statements

Opcional. Una o más instrucciones posteriores a Case que se ejecutan si testexpression coincide con cualquier cláusula de expressionlist.

elsestatements

Opcional. Una o más instrucciones posteriores a Case Else que se ejecutan si testexpression no coincide con ninguna cláusula de expressionlist de cualquiera de las instrucciones Case.

End Select

Termina la definición la construcción Select...Case.

Comentarios

Si testexpression coincide con cualquier cláusula de Case expressionlist, se ejecutan las instrucciones situadas a continuación de Case hasta la siguiente instrucción Case, Case Else o End Select. El control pasa después a la instrucción que sigue a End Select. Si testexpression coincide con una cláusula expressionlist en más de una cláusula Case, sólo se ejecutan las instrucciones situadas después de la primera coincidencia.

La instrucción Case Else se utiliza para introducir las elsestatements que se deben ejecutar si no se encuentra ninguna coincidencia entre las cláusulas testexpression y expressionlist de cualquiera de las demás instrucciones Case. Aunque no es necesario, es aconsejable tener una instrucción Case Else en su construcción Select Case para controlar los valores testexpression imprevistos. Si no coincide ninguna cláusula Case expressionlist con testexpression y no hay ninguna instrucción Case Else, el control pasa a la instrucción End Select siguiente.

Se pueden utilizar varias expresiones o intervalos en cada cláusula Case. Por ejemplo, la línea siguiente es válida.

Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber

cy37t14y.alert_note(es-es,VS.90).gifNota:

La palabra clave Is utilizada en las instrucciones Case y Case Else no es igual que Is (Operador, Visual Basic), que se utiliza para la comparación de referencias a objetos.

Puede especificar intervalos y varias expresiones para cadenas de caracteres. En el ejemplo siguiente, Case coincide con cualquier cadena que sea exactamente igual a "apples", tenga un valor comprendido entre "nuts" y "soup" en orden alfabético, o contenga el mismo valor exacto que el valor actual de testItem.

Case "apples", "nuts" To "soup", testItem

El valor de Option Compare puede afectar a las comparaciones de cadenas. Bajo Option Compare Text, las cadenas "Apples" y "apples" se comparan como iguales, pero no bajo Option Compare Binary.

cy37t14y.alert_note(es-es,VS.90).gifNota:

Una instrucción Case con varias cláusulas puede exhibir el comportamiento conocido como cortocircuitar. Visual Basic evalúa las cláusulas de izquierda a derecha y, si una de ellas coincide con testexpression, no se evalúan las cláusulas restantes. El procedimiento de cortocircuitar puede mejorar el rendimiento, pero puede generar resultados inesperados si está esperando que se evalúen todas las expresiones de expressionlist. Para obtener más información sobre cómo cortocircuitar, vea Expresiones booleanas.

Si el código contenido en un bloque de instrucciones Case o Case Else no necesita ejecutar más instrucciones contenidas en el bloque, puede salir del bloque utilizando la instrucción Exit Select. Esto transfiere inmediatamente el control a la instrucción que sigue a End Select.

Las construcciones Select Case se pueden anidar. Cada construcción Select Case anidada debe tener una instrucción End Select coincidente y estar completamente contenida dentro de un único bloque de instrucción Case o Case Else de la construcción Select Case más exterior dentro de la cual está anidada.

Ejemplo

En el ejemplo siguiente se utiliza una construcción Select Case para escribir una línea correspondiente al valor de la variable number. La segunda instrucción Case contiene el valor que coincide con el valor actual de number, por lo que se ejecuta la instrucción que escribe "Between 6 and 8, inclusive".

Dim number As Integer = 8

Select Case number
Case 1 To 5
Debug.WriteLine("Between 1 and 5, inclusive")
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8
Debug.WriteLine("Between 6 and 8, inclusive")
Case 9 To 10
Debug.WriteLine("Equal to 9 or 10")
Case Else
Debug.WriteLine("Not between 1 and 10, inclusive")
End Select



IF......THEN.......ELSE

If condition [ Then ]

[ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else
[ elsestatements ] ]
End If
-or-
If condition Then [ statements ] [ Else [ elsestatements ] ]
Partes

condition

Obligatorio. Expresión. Se debe evaluar como True o False, o como un tipo de datos que es implícitamente convertible a Boolean.

Then

Obligatorio en la forma de una línea, opcional en la forma de varias líneas.

statements

Opcional. Se ejecutan una o más instrucciones que siguen a If...Then que se ejecutan si condition se evalúa como True.

elseifcondition

Obligatorio si ElseIf está presente. Expresión. Se debe evaluar como True o False, o como un tipo de datos que es implícitamente convertible a Boolean.

elseifstatements

Opcional. Se ejecutan una o más instrucciones que siguen a ElseIf...Then que se ejecutan si elseifcondition se evalúa como True.

elsestatements

Opcional. Una o más instrucciones que se ejecutan si ninguna expresión condition o elseifcondition anterior se evalúa como True.

End If

Termina el bloque If...Then...Else.

Comentarios

Puede utilizar la forma de una sola línea para pruebas cortas y sencillas. Sin embargo, el formato de múltiples líneas proporciona más estructura y flexibilidad que el formato de una sola línea y, generalmente, es más fácil de leer, mantener y depurar.

Cuando se encuentra una estructura If...Then...Else, se comprueba la condition. Si condition es True, se ejecutan las instrucciones que están a continuación de Then. Si condition es False, se evalúan por orden cada una de las instrucciones ElseIf. Cuando se encuentra una elseifcondition que sea True, se ejecutan las instrucciones que siguen inmediatamente a la instrucción Then asociada. Si elseifcondition se evalúa como True, o si no hay ninguna instrucción ElseIf, se ejecutan las instrucciones situadas después de Else. Después de la ejecución de las instrucciones que siguen a Then, ElseIf o Else, la ejecución continúa con la instrucción que sigue a End If.

NoteSugerencia

La Instrucción Select...Case (Visual Basic) puede ser más útil al evaluar una única expresión que tiene varios valores posibles.

Con el formato de una sola línea, es posible ejecutar varias instrucciones como resultado de una decisión If...Then. Todas las instrucciones deben estar en la misma línea y separarse con dos puntos. En el siguiente ejemplo se muestra cómo.

If A > 10 Then A = A + 1 : B = B + A : C = C + B

Con la forma de varias líneas, la instrucción If debe ser la única instrucción incluida en la primera línea. Las instrucciones ElseIf, Else y End If pueden ir precedidas solamente por una etiqueta de línea. El bloque If...Then...Else de varias líneas debe finalizar con una instrucción End If.

Para determinar si una instrucción If introduce o no un formato de varias líneas, examine lo que sigue a la palabra clave Then. Si aparece cualquier otra cosa que no sea un comentario después de Then en la misma instrucción, ésta se trata como una instrucción If de una sola línea. Si no está presente Then, debe ser el comienzo de una instrucción If...Then...Else de varias líneas.

Las cláusulas ElseIf y Else son opcionales. Puede tener tantas cláusulas ElseIf como desee en una instrucción If...Then...Else de varias líneas, pero no puede aparecer ninguna de ellas después de una cláusula Else. Los formatos de múltiples líneas pueden anidarse unos dentro de otros.

Ejemplo

En el ejemplo siguiente se muestran los formatos de varias líneas y de una sola línea de la instrucción If...Then...Else.

Dim number, digits As Integer

Dim myString As String
number = 53
If number Then
digits = 1
ElseIf number < style="color: Blue;">Then
digits = 2
Else
digits = 3
End If
If digits = 1 Then myString = "One" Else myString = "More than one"

En el ejemplo anterior, la condición ElseIf se evalúa como True y se asigna a digits un valor de 2. A continuación, la última instrucción le asigna un valor de "Más de una" a myString.