Visual basic Control CommandButton - botón de comando

Control CommandButton - botón de comando



Descripción del control

Este control " Botón de comando ", nos permite ejecutar alguna rutina, función o procedimiento, generalmente en el evento click del mismo, para realizar de esta manera alguna tarea dentro del programa

Como se dijo, se utiliza generalmente en el evento Click par ejecutar alguna acción cuando se produce dicho evento, y es precisamente el evento Click, el que por defecto añade Visual Basic al control
Por ejemplo, si colocamos un control Command1 en un formulario, y le damos DobleClick para que se abra la ventana de código de visual basic, podemos ver la siguiente rutina:
  1. Private Sub Command1_Click()  
  2.   
  3.   
  4. End Sub  

Todas las instrucciones que estén dentro de este procedimiento, llamado Command1_Click, se ejecutarán cuando presionemos el botón. Por ejemplo si ejecutamos el siguiente código, lo que haría sería mostrar la fecha del sistema en la barra de título del formulario, utilizando la función Date de Visual Basic
  1. Option Explicit  
  2.   
  3. Private Sub Command1_Click()  
  4.     ' -- Establecemos en la barra de título del formulario la fecha del Pc  
  5.     Me.Caption = Date  
  6.   
  7. End Sub  

Este otro ejemplo, al presionar el botón, termina el programa utilizando la función End de vb. Colocar un Botón en el form
  1. Option Explicit  
  2.   
  3. Private Sub Command1_Click()  
  4.     End  
  5. End Sub  
  6.   
  7. Private Sub Form_Load()  
  8.     Command1.Caption = "Salir"  
  9. End Sub  



Propiedades

Las propiedades que posee el control CommandButton son prácticamente las que poseen el resto de controles estandar de visual basic, salvo algunas exclusivas como la propiedad Style.
Propiedad Style
La propiedad Style tiene 2 valores, 0 - Standar y 1 - Graphical. La primera es del clásico botón y este valor es el asignado por defecto. En cambio Graphical permite utilizar CommandButton para poder mostrar imágenes, cambiarle el color del fondo, el tipo de fuente, y utilizando el Api de windows, se puede cambiar por ejemplo el color de la fuente, es decir el ForeColor que este control no lo posee.
Esta imagen muestra, en el Command1 , una imagen, por medio de la propiedad Picture que la puedes cargar desde la ventana de propiedades. El segundo, el Command2, no tiene imagen, pero muestra como se puede establecer el color de fondo, propiedad Backcolor, siempre y cuando la propiedad Style sea de tipo gráfico, ya que si está en estándar no surtirá efecto.
Propiedad Style de los botones de comando

Otro ejemplo sobre esta propiedad: Al pasar el mouse por encima del Commandbutton, se cambiará la fuente, en Negrita, el Subrayado, y el color de fondo, al salir el puntero fuera del botón, se reestablecerá a la fuente normal, y se restaurará el color de fondo usando el color por defecto que utiliza windows para los botones, mediante la constante VbButtonFace
Para el ejemplo, colocar un Command1, colocar la propiedad Style en Graphical y pegar estas líneas en el formulario:
  1. Option Explicit  
  2.   
  3. ' -- Flag para que no se ejecute constantemente  
  4. ' -- el código del Form y del CommandButton  
  5. Dim Flag As Boolean  
  6.   
  7. Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)  
  8.   
  9.     ' -- Establecer la fuente del commandButton en negrita y con subrayado  
  10.     If Flag Then  
  11.         Command1.Font.Bold = True  
  12.         Command1.Font.Underline = True  
  13.         Command1.BackColor = vbWhite  
  14.         Flag = False  
  15.     End If  
  16.   
  17. End Sub  
  18.   
  19. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)  
  20.     ' -- Quita la negrita, el subrayado, y restaura el color de fondo  
  21.     If Flag = False Then  
  22.         Command1.Font.Bold = False  
  23.         Command1.Font.Underline = False  
  24.         Command1.BackColor = vbButtonFace  
  25.         Flag = True  
  26.     End If  
  27.   
  28. End Sub  

Propiedad Default
Esta propiedad es muy útil en ciertas locaciones, sobre todo en formularios y programas que utilizan bases de datos, y opciones para buscar.
Default puede tener dos valores , True o False. Si está en True, el botón será el botón por defecto que se ejecutará cuando se presione la tecla enter. Por ejemplo hagamos de cuenta que nuestro programa contiene un botón. Ese botón ejecuta un código para buscar datos en una base de datos. Si el usuario en un momento determinado, se encuentra escribiendo datos en un control textbox, y presiona la tecla Enter, el CommandButton al tener la propiedad Default en True, ejecutará el código que tenga en el evento click. En este caso , en el evento clic, contendría todo el código para realizar la búsqueda de registros.
Un simple ejemplo
Coloca: Un control TextBox, un CommandButton. Pega el siguiente código
  1. Option Explicit  
  2.   
  3. Private Sub Command1_Click()  
  4.     MsgBox "Se ejecutó el evento Click del commandButton", vbInformation  
  5. End Sub  
  6.   
  7. Private Sub Form_Load()  
  8.     ' -- Establecer propiedad Default  
  9.     Command1.Default = True  
  10.       
  11.     MsgBox "Coloca el cursor en un control textbox para que tome el foco, " & _  
  12.            "y luego, presiona la tecla enter, y verás como de todas formas " & _  
  13.            "se ejecutó el evento click ya que es el control por defecto del" & _  
  14.            "formulario. ( Nota .Solo puede haber un solo botón con la propiedad " & _  
  15.            "Default en un formuario)", vbInformation  
  16.       
  17. End Sub  


Propiedades de posición
Las propiedades de posición son las que permiten cambiar el tamaño y la posición en el objeto que lo contiene. estas propiedades son cuatro : Left, Top, Height y Width.
El siguiente ejemplo muestra como usar estas propiedades. Supongamos que nuestro formulario contiene un botón "Salir" en la parte inferior:
Ahora bien ¿ como hacer para que al presionar el botón de maximizar del formulario o cambiar de tamaño el formulario, el botón continúe situado en la esquina inferior derecha ? Para ello hay que modificar la propiedad Left y Top del botón. ¿ Pero donde colocar el código? para ello se debe colocar en el evento Resize del formulario.
Puedes probar este simple ejemplo con el siguiente código:
  1. Option Explicit  
  2.   
  3. ' Valores para márgenes - Prueba cambiando estos valores  
  4. Private Const MARGEN_IZQUIERDO        As Single = 60  
  5. Private Const MARGEN_INFERIOR        As Single = 60  
  6.   
  7. Private Sub Command1_Click()  
  8.     Unload Me  
  9. End Sub  
  10.   
  11. Private Sub Form_Load()  
  12.     Command1.Caption = "Salir"  
  13. End Sub  
  14.   
  15. ' -- Posicionar el botón al cambiar de tamaño la ventana de formulario  
  16. Private Sub Form_Resize()  
  17.     Command1.Left = (Me.ScaleWidth - Command1.Width) - MARGEN_IZQUIERDO  
  18.     Command1.Top = (Me.ScaleHeight - Command1.Height) - MARGEN_INFERIOR  
  19. End Sub  


Propiedad Enabled
Esta propiedad lo que hace es habilitar o deshabilitar el botón. Es una propiedad que la poseen casi todos los controles, tanto los de Visual basic, como otros controles de terceros ( controles ocx o Activex )
Aquí puedes ver ver un pequeño ejemplo de su uso.
Supongamos que nuestro programa contiene un un control de texto donde se ingresan datos para buscar registros en una base de datos. Y también tenemos un botón que contiene el código que debe ejecutar para realizar la búsqueda dentro de la base de datos. Si en algún momento el control de texto no contiene datos, es decir no contiene texto valga la redundancia, no sería necesario que el botón se encuentre habilitado, por el contrario, deberíamos deshabilitarlo.
Puedes probar este simple ejemplo, colocando un control Textbox , un botón y pegando el siguiente código en el formulario principal
  1. Option Explicit  
  2.   
  3.   
  4. Private Sub Command1_Click()  
  5.     MsgBox Text1.Text, vbInformation  
  6. End Sub  
  7.   
  8. Private Sub Form_Load()  
  9.     Text1.Text = ""  
  10.     Command1.Caption = "Buscar .."  
  11. End Sub  
  12.   
  13. ' -- El evento Change se produce cuando cambia el contenido  
  14. ' -- de la caja de texto  
  15. Private Sub Text1_Change()  
  16.     If Text1.Text = "" Then  
  17.        Command1.Enabled = False  
  18.     Else  
  19.        Command1.Enabled = True  
  20.     End If  
  21. End Sub  


Modificar propiedades de varios controles
Si en el algún momento se necesita, por ejempo, habilitar o deshabilitar todos los botones que hay en el formulario, o por ejemplo camabiarle y establecerle otras propiedades que se deseen, puedes utilizar un bucle For Each para recorrer todos los controles del formulario,y utilizando el operador TypeOf de Visual basic, comprobar si el control dentro del bucle es de tipo CommandButton.
Nota. El ejemplo no tiene ninguna utilidad especifica, solo muestra el uso del ejemplo.
Debes colocar dos controles textBox. Text1 y Text2, y todos los botones que desees, por ejemplo 4 como mustra la imagen de abajo
Al colocar el cursor en el Text1 se habilitarán todos los botones, luego al colocar el cursor en el Text2, es decir cuando recibe el foco, se deshabilitarán todos los botones.
  1. Option Explicit  
  2.   
  3. Private Sub Form_Load()  
  4.     Command1.Caption = "Opción 1"  
  5.     Command2.Caption = "Opción 2"  
  6.     Command3.Caption = "Opción 3"  
  7.     Command4.Caption = "Opción 4"  
  8. End Sub  
  9.   
  10. ' \\ -- Procedimiento para activar y desactivar los botones  
  11. Sub EnabledDisabled(ByVal bValue As Boolean)  
  12.   
  13.     ' -- Recorrer todos los objetos y controles del form  
  14.     Dim xCtrl As Control  
  15.     For Each xCtrl In Me.Controls  
  16.         ' xCtrl ¿ es un Command Button ?  
  17.         If TypeOf xCtrl Is CommandButton Then  
  18.            ' si lo es, entonces habilitarlo o deshabilitarlo  
  19.            xCtrl.Enabled = bValue  
  20.         End If  
  21.     Next  
  22. End Sub  
  23.   
  24. '\\ -- Deshabilitar  
  25. Private Sub Text2_GotFocus()  
  26.     Call EnabledDisabled(False)  
  27. End Sub  
  28.   
  29. '\\ -- Activar  
  30. Private Sub Text1_GotFocus()  
  31.     Call EnabledDisabled(True)  
  32. End Sub  


Propiedad MousePointer y Mouseicon
Estas dos propiedades son muy simples de usar y son comunes a la mayoría de objetos y controles de vb
Mousepointer devuelve o establece el tipo de puntero del mouse mostrado al pasar por encima de un objeto
MouseIcon establece un icono personalizado para el mouse
Ejemplo. Colocar un control ListBox y un botón. Pegar el siguiente código fuente en el formulario
  1. Option Explicit  
  2.   
  3. Private Sub Form_Load()  
  4.   
  5.     With Command1  
  6.         ' -- Puntero de mouse personalizado - Pasar usar con íconos  
  7.         .MousePointer = 99  
  8.         ' -- usar el ícono del formulario ( Puedes especificar el que desees cargandolo desde la ventana de propiedades o utilizando la función LoadPicture)  
  9.         .MouseIcon = Me.Icon  
  10.     End With  
  11.   
  12.     ' -- Cargar la lista de punters de mouse para el botón  
  13.     With List1  
  14.         .AddItem "0 - Default"  
  15.         .AddItem "1 - Arrow"  
  16.         .AddItem "2 - Cross"  
  17.         .AddItem "3 - Beam"  
  18.         .AddItem "4 - Icon"  
  19.         .AddItem "5 - Size Ne SW"  
  20.         .AddItem "6 - Size Ne SW"  
  21.         .AddItem "7 - Size N S"  
  22.         .AddItem "8 - Size NW Se"  
  23.         .AddItem "9 - Up Arrow"  
  24.         .AddItem "10 - HourGlass"  
  25.         .AddItem "Custom"  
  26.     End With  
  27.       
  28. End Sub  
  29.   
  30. Private Sub List1_Click()  
  31.     ' -- Cambiar la propiedad MousePointer  
  32.     With List1  
  33.         If .ListIndex <> -1 Then  
  34.             Command1.MousePointer = .ListIndex  
  35.         End If  
  36.         If .ListIndex = .ListCount - 1 Then  
  37.            Command1.MousePointer = 99  
  38.            Command1.MouseIcon = Me.Icon  
  39.         End If  
  40.     End With  
  41. End Sub  


Métodos y funciones

Este control prácticamente no contiene métodos o funciones. El mas importante y el mas utilizado es el método SetFocus, que también lo posen muchos otros controles.
Lo que hace el método setFocus, es poder establecer el enfoque a un objeto especifico, en este caso al botón. Su uso es muy simple, solo basta con ejecutarlo desde alguna parte de nuestro programa para que el Commandbutton pase a tener el foco.
Una cosa muy importante a tener en cuenta , es que para poder establecer el foco a cualquier control de visual basic, el objeto se debe encontrar visible, y también se debe encontrar habilitado. Es decir, si la propiedad Visible o la propiedad Enabled del objeto se encuentran en False, esto producirá un error en tiempo de ejecución. Por ello siempre se debe colocar una rutina de error para poder controlar esto, o comprobando estas propiedades mediante una instrucción If Then
Para recrear este error puedes ejecutar este código
Coloca dos botones
  1. Option Explicit  
  2.   
  3. Private Sub Command2_Click()  
  4.     ' -- Esta instrucción generará un error, ya que le intentará pasar el foco  
  5.     ' -- al command1, que se encuentra deshabilitado  
  6.     Command1.SetFocus  
  7. End Sub  
  8.   
  9. Private Sub Form_Load()  
  10.     ' -- Deshabilitamos el Command1  
  11.     Command1.Enabled = False  
  12.     MsgBox "Presiona el Botón Command2", vbInformation  
  13. End Sub  

Para solucionarlo, simplemente puedes hacer algo asi
Colocar dos botones
  1. Option Explicit  
  2.   
  3. Private Sub Command2_Click()  
  4.     With Command1  
  5.         ' -- Si está visible y esta habilitado, entonces .. pasar el foco  
  6.         If .Visible And .Enabled Then  
  7.             .SetFocus  
  8.         End If  
  9.     End With  
  10. End Sub  
  11.   
  12. Private Sub Form_Load()  
  13.     MsgBox "Presiona el Botón Command2", vbInformation  
  14. End Sub  



Eventos principales del control CommandButton

Aparte del evento Click que se ejecuta cuando lo presionamos, otros eventos importantes son:
  • Evento GotFocus y LostFocus : Se disparan dichos eventos cuando el control recibe o pierde el foco
  • MouseMove, MouseDown y MouseUp: El primero se dispara cuando el puntero del mouse se mueve encima del botón, MouseDown cuando el botón está abajo y cuando está arriba MouseUp

Por ejemplo para probar el uso de los métodos GotFocus y LostFocus (recibe y pierde el foco) colocar 3 CommandButton, Command1Command2 y Command3. Luego un Label1 que mostrará el control que recibe el foco (GotFocus) y un Label2 que mostrará el control que pierde el foco (LosFocus)
Luego de añadir los controles pegar el código siguiente en el formulario
  1. Private Sub Command1_GotFocus()  
  2.     Label1 = "El foco lo tiene: " & Command1.Caption  
  3. End Sub  
  4.   
  5. Private Sub Command2_GotFocus()  
  6.     Label1 = "El foco lo tiene: " & Command2.Caption  
  7. End Sub  
  8.   
  9. Private Sub Command3_GotFocus()  
  10.     Label1 = "El foco lo tiene: " & Command3.Caption  
  11. End Sub  
  12.   
  13. Private Sub Command1_LostFocus()  
  14.     Label2 = "Perdió el foco el: " & Command1.Caption  
  15. End Sub  
  16.   
  17. Private Sub Command2_LostFocus()  
  18.     Label2 = "Perdió el foco el: " & Command2.Caption  
  19. End Sub  
  20.   
  21. Private Sub Command3_LostFocus()  
  22.     Label2 = "Perdió el foco el: " & Command3.Caption  
  23. End Sub  


Nota: en la ventana de código podés ver que tenés 2 combos o listas desplegables:
Vista previa del evento gotfocus del commandbutton

El combo de la izquierda muestra los objetos que tiene el formulario, es decir los controlesrutinas y funciones, y la lista de la derecha los eventos y métodos del objeto seleccionado en la lista izquierda.
En la captura del ejemplo anterior, se puede ver que cuando el cursor se encuentra dentro de la ventana de código está situado en un procedimiento determinado, las listas se actualizan mostrándote dicho objeto, por ejemplo el cursor está en el control u objeto llamado Command3 en el evento Gotfocus, y las listas desplegables muestran esto mismo.
Siguiendo el ejemplo anterior, para escribir código en el evento MouseMove del Command1 para que muestre un mensaje cuando pasa el mouse encima del botón, se tendría que seleccionar de la lista izquierda el Command1 de esta forma:


y después seleccionar el evento que se quiera utilizar disponible en el otro combo desplegable, en este caso el MouseMove
Vista previa del evento MouseMove del commandbutton

Al hacer esto en la ventana de código visual basic te agrega un procedimiento vacío:

Vista del procedimiento MouseMove que crea visual basic para los controles CommandButton

Ahora el código que escribas dentro de este procedimiento se va a disparar cada vez que pases el mouse encima del Command1. Por ejemplo para mostrar un mensaje con la función MsgBox cada ves que pases el puntero encima, agrega lo siguiente:
  1. Option Explicit  
  2.   
  3. ' -- \\ Evento MouseMove  
  4. Private Sub Command1_MouseMove( _  
  5.                     Button As Integer, _  
  6.                     Shift As Integer, X As Single, Y As Single)  
  7.       
  8.     MsgBox "Estás encima del botón", vbInformation  
  9.       
  10. End Sub  



Tomar la apariencia de los temas de windows para los botones

Por defecto el aspecto de los botones, no toma la apariencia del tema que tenga activo windows. Para poder hacer que los botones y el resto de los controles tengan la tengan, se puede utilizar un archivo Manifest.
En el siguiente enlace puedes ver un ejemplo de como implementarlo:


Enlaces relacionados

SHARE

Oscar perez

Arquitecto especialista en gestion de proyectos si necesitas desarrollar algun proyecto en Bogota contactame en el 3006825874 o visita mi pagina en www.arquitectobogota.tk

  • Image
  • Image
  • Image
  • Image
  • Image
    Blogger Comment
    Facebook Comment

0 comentarios:

Publicar un comentario