Bienvenido a Site Fun para disfrutar del foro al máximo se pide que se registre ya que no podrá ver ningun foro.


CommandButton

Ir abajo

CommandButton

Mensaje por Lehm el 15/05/10, 11:47 pm

CommandButton


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:

Código:
Private Sub Command1_Click()


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

Cita:

Option Explicit

Private Sub Command1_Click()
' -- Establecemos en la barra de título del formulario la fecha del Pc
Me.Caption = Date

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

Código:
Option Explicit

Private Sub Command1_Click()
End
End Sub

Private Sub Form_Load()
Command1.Caption = "Salir"
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.



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:

Código:
Option Explicit

' -- Flag para que no se ejecute constantemente
' -- el código del Form y del CommandButton
Dim Flag As Boolean

Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

' -- Establecer la fuente del commandButton en negrita y con subrayado
If Flag Then
Command1.Font.Bold = True
Command1.Font.Underline = True
Command1.BackColor = vbWhite
Flag = False
End If

End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
' -- Quita la negrita, el subrayado, y restaura el color de fondo
If Flag = False Then
Command1.Font.Bold = False
Command1.Font.Underline = False
Command1.BackColor = vbButtonFace
Flag = True
End If

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

Código:
Option Explicit

Private Sub Command1_Click()
MsgBox "Se ejecutó el evento Click del commandButton", vbInformation
End Sub

Private Sub Form_Load()
' -- Establecer propiedad Default
Command1.Default = True

MsgBox "Coloca el cursor en un control textbox para que tome el foco, " & _
"y luego, presiona la tecla enter, y verás como de todas formas " & _
"se ejecutó el evento click ya que es el control por defecto del" & _
"formulario. ( Nota .Solo puede haber un solo botón con la propiedad " & _
"Default en un formuario)", vbInformation

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:

Código:
Option Explicit

' Valores para márgenes - Prueba cambiando estos valores
Private Const MARGEN_IZQUIERDO As Single = 60
Private Const MARGEN_INFERIOR As Single = 60

Private Sub Command1_Click()
Unload Me
End Sub

Private Sub Form_Load()
Command1.Caption = "Salir"
End Sub

' -- Posicionar el botón al cambiar de tamaño la ventana de formulario
Private Sub Form_Resize()
Command1.Left = (Me.ScaleWidth - Command1.Width) - MARGEN_IZQUIERDO
Command1.Top = (Me.ScaleHeight - Command1.Height) - MARGEN_INFERIOR
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


Código:
Option Explicit


Private Sub Command1_Click()
MsgBox Text1.Text, vbInformation
End Sub

Private Sub Form_Load()
Text1.Text = ""
Command1.Caption = "Buscar .."
End Sub

' -- El evento Change se produce cuando cambia el contenido
' -- de la caja de texto
Private Sub Text1_Change()
If Text1.Text = "" Then
Command1.Enabled = False
Else
Command1.Enabled = True
End If
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.



Código:
Option Explicit

Private Sub Form_Load()
Command1.Caption = "Opción 1"
Command2.Caption = "Opción 2"
Command3.Caption = "Opción 3"
Command4.Caption = "Opción 4"
End Sub

' \\ -- Procedimiento para activar y desactivar los botones
Sub EnabledDisabled(ByVal bValue As Boolean)

' -- Recorrer todos los objetos y controles del form
Dim xCtrl As Control
For Each xCtrl In Me.Controls
' xCtrl ¿ es un Command Button ?
If TypeOf xCtrl Is CommandButton Then
' si lo es, entonces habilitarlo o deshabilitarlo
xCtrl.Enabled = bValue
End If
Next
End Sub

'\\ -- Deshabilitar
Private Sub Text2_GotFocus()
Call EnabledDisabled(False)
End Sub

'\\ -- Activar
Private Sub Text1_GotFocus()
Call EnabledDisabled(True)
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


Código:
Option Explicit

Private Sub Form_Load()

With Command1
' -- Puntero de mouse personalizado - Pasar usar con íconos
.MousePointer = 99
' -- usar el ícono del formulario ( Puedes especificar el que desees cargandolo desde la ventana de propiedades o utilizando la función LoadPicture)
.MouseIcon = Me.Icon
End With

' -- Cargar la lista de punters de mouse para el botón
With List1
.AddItem "0 - Default"
.AddItem "1 - Arrow"
.AddItem "2 - Cross"
.AddItem "3 - Beam"
.AddItem "4 - Icon"
.AddItem "5 - Size Ne SW"
.AddItem "6 - Size Ne SW"
.AddItem "7 - Size N S"
.AddItem "8 - Size NW Se"
.AddItem "9 - Up Arrow"
.AddItem "10 - HourGlass"
.AddItem "Custom"
End With

End Sub

Private Sub List1_Click()
' -- Cambiar la propiedad MousePointer
With List1
If .ListIndex <> -1 Then
Command1.MousePointer = .ListIndex
End If
If .ListIndex = .ListCount - 1 Then
Command1.MousePointer = 99
Command1.MouseIcon = Me.Icon
End If
End With
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
Código:
Option Explicit

Private Sub Command2_Click()
' -- Esta instrucción generará un error, ya que le intentará pasar el foco
' -- al command1, que se encuentra deshabilitado
Command1.SetFocus
End Sub

Private Sub Form_Load()
' -- Deshabilitamos el Command1
Command1.Enabled = False
MsgBox "Presiona el Botón Command2", vbInformation
End Sub
Para solucionarlo, simplemente puedes hacer algo asi

Colocar dos botones
Código:
Option Explicit

Private Sub Command2_Click()
With Command1
' -- Si está visible y esta habilitado, entonces .. pasar el foco
If .Visible And .Enabled Then
.SetFocus
End If
End With
End Sub

Private Sub Form_Load()
MsgBox "Presiona el Botón Command2", vbInformation
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, Command1, Command2 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
Código:
Private Sub Command1_GotFocus()
Label1 = "El foco lo tiene: " & Command1.Caption
End Sub

Private Sub Command2_GotFocus()
Label1 = "El foco lo tiene: " & Command2.Caption
End Sub

Private Sub Command3_GotFocus()
Label1 = "El foco lo tiene: " & Command3.Caption
End Sub

Private Sub Command1_LostFocus()
Label2 = "Perdió el foco el: " & Command1.Caption
End Sub

Private Sub Command2_LostFocus()
Label2 = "Perdió el foco el: " & Command2.Caption
End Sub

Private Sub Command3_LostFocus()
Label2 = "Perdió el foco el: " & Command3.Caption
End Sub
Nota: en la ventana de código podés ver que tenés 2 combos o listas desplegables:


El combo de la izquierda muestra los objetos que tiene el formulario, es decir los controles, rutinas 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

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


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:

Código:
Option Explicit

' -- \\ Evento MouseMove
Private Sub Command1_MouseMove( _
Button As Integer, _
Shift As Integer, X As Single, Y As Single)

MsgBox "Estás encima del botón", vbInformation

End Sub
avatar
Lehm
Administrador
Administrador

Masculino
Mensajes : 145
Monedas 14434

Volver arriba Ir abajo

Re: CommandButton

Mensaje por Marcos el 16/05/10, 02:43 am

Buen post=? saludos. Wink
avatar
Marcos
Administrador
Administrador

Masculino
Mensajes : 192
Monedas 18725

http://sitefun-m.superforo.net

Volver arriba Ir abajo

Re: CommandButton

Mensaje por Sasuke Uchiha el 16/05/10, 03:23 pm

Muy bueno Wink

___________________________________________________________________________________________________________________________


.:Socio de Site Fun - Usuario calificado:.




Mis Juegos Favoritos::


Mis Firmas:














avatar
Sasuke Uchiha
Soy User Full
Soy User Full

Masculino
Mensajes : 1035
Monedas 1580

http://www.m-sitefun.es.tl

Volver arriba Ir abajo

Re: CommandButton

Mensaje por Sharow.- el 19/05/10, 03:14 pm

Muy buen post.

Adiós.

___________________________________________________________________________________________________________________________





Gracias sasuke.
avatar
Sharow.-
Administrador
Administrador

Masculino
Mensajes : 244
Monedas 15940

Volver arriba Ir abajo

Re: CommandButton

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.