Formulario- control

15/07/2007 - 00:22 por Desastres | Informe spam
Buenas noches.

¿ de la misma forma que de decimos Thisworkbook, activesheet ¿Hay alguna forma de decir :
active control.visible = false ( el que tiene el foco en este momento)
active frame.visible = false ( el que tiene el foco en este momento)

Saludos
José Luis

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
15/07/2007 - 03:13 | Informe spam
hola, Des !

de la misma forma que de decimos Thisworkbook, activesheet Hay alguna forma de decir:
active control.visible = false (el que tiene el foco en este momento)
active frame.visible = false (el que tiene el foco en este momento)



1) puedes usar *ActiveControl* [y administrar sus propiedades]
te sugiero incluir antes un OnError. [por si la propiedad o metodo no fuera aplicable] -?-

2) si necesitas *estar seguro* de que el actrivecontrol es un control frame...
puedes preguntar por su tipo o por su nombre [depende de tus reales intenciones] :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Desastres
16/07/2007 - 01:19 | Informe spam
Hola Héctor. Gracias.
Intentaré encontrar algún dato mas.
De lo que me dices deduzco que el hecho de que un control de un marco sea el control activo o
tenga foco excluye que el marco sea el control activo.
Es decir, no es como en una hoja que si un de sus celdas es la activa implica que la hoja también lo
es.

Saludos
Des


"Héctor Miguel" escribió en el mensaje
news:
hola, Des !

> de la misma forma que de decimos Thisworkbook, activesheet Hay alguna forma de decir:
> active control.visible = false (el que tiene el foco en este momento)
> active frame.visible = false (el que tiene el foco en este momento)

1) puedes usar *ActiveControl* [y administrar sus propiedades]
te sugiero incluir antes un OnError. [por si la propiedad o metodo no fuera


icable] -?-

2) si necesitas *estar seguro* de que el actrivecontrol es un control frame...
puedes preguntar por su tipo o por su nombre [depende de tus reales intenciones] :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.


Respuesta Responder a este mensaje
#3 Héctor Miguel
16/07/2007 - 05:15 | Informe spam
hola, Des !

De lo que me dices deduzco que el hecho de que un control de un marco sea el control activo
o tenga foco excluye que el marco sea el control activo.
Es decir, no es como en una hoja que si un de sus celdas es la activa implica que la hoja tambien lo es.



[mas bien] la deduccion debe ser que la propiedad activecontrol 'identifica' al control activo del *contenedor* activo
y los contenedores pueden ser objetos userform, frame o [multi]page

prueba con un formulario que contenga los siguientes controles:
-> nivel1 [el formulario]: un commandbutton y un frame
nivel2 [primer frame]: un commandbutton y otro frame
nivel3 [segundo frame]: un commandbutton

copia/pega el siguiente codigo para los commandbutton [observa que te reporta el tercer commandbutton]

Private Sub CommandButton1_Click()
MsgBox ActiveControl.Name
End Sub
Private Sub CommandButton2_Click()
If TypeName(ActiveControl) = "Frame" Then
MsgBox Frame1.ActiveControl.Name
Else
MsgBox ActiveControl.Name
End If
End Sub
Private Sub CommandButton3_Click()
If TypeName(ActiveControl) = "Frame" Then
MsgBox Frame1.ActiveControl.Name
Else
MsgBox ActiveControl.Name
End If
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Desastres
24/07/2007 - 17:41 | Informe spam
Hola Héctor, Gracias,
Pero sigo sin enterarme.( la sesopausia. )
Creo que no es claro el ejemplo que me pones ( para mi, claro).( te refieres siempre a Frame1)
Creo que la unica instrucion que deberia indicar el control que recibe el clic es :
ActiveControl.name y que ello deberia permitir ver con claridad cual es el control activo, pero no
lo consigo


Yo queria poner una instrucion +/- así:

Dim Cajita as Control
Sub opOfe_Clic()
For Each Cajita in mrcTip ' Marco de Tipos
cajita.visible=false
next cajita
ActiveControl.Visible= True

o bien

For Each Cajita in mrcTip ' Marco de Tipos
if not cajita.Name = ActiveControl.name then
cajita.visible=false
end if
next cajita
Lo malo es que incluso teniendo mrcTip(el marco de tipos) el tabindex=0 y el boton de opcion opTip
tabstop=true y TabIndex=0, no funciona, por no llegar a ser activo en el momento de hacer click ni
con el evento enter.

¿Cömo puedo hacerlo?

El ejemplo que me propones lo he modificado para comparar, pero no veo la razon de lo que me indicas
y lo que yo creo no funciona.


Private Sub CommandButton1_Click()
MsgBox "Hector-" & ActiveControl.Name & vbCr & "Yom Ime-" & ActiveControl.Name
End Sub
Private Sub CommandButton2_Click()
If TypeName(ActiveControl) = "Frame" Then
MsgBox "Hector-" & Frame1.ActiveControl.Name & vbCr & "Yom Ime-" & ActiveControl.Name
Else
MsgBox "Hector-" & ActiveControl.Name & vbCr & "Yom Ime-" & ActiveControl.Name
End If
End Sub
Private Sub CommandButton3_Click()
If TypeName(ActiveControl) = "Frame" Then
MsgBox "Hector-" & Frame1.ActiveControl.Name & vbCr & "Yom Ime-" & ActiveControl.Name
Else
MsgBox "Hector-" & ActiveControl.Name & vbCr & "Yom Ime-" & ActiveControl.Name
End If
End Sub

Private Sub enfocar()

' If TypeName(ActiveControl) = "Frame" Then
' MsgBox Frame1.ActiveControl.Name
' Else
' MsgBox ActiveControl.Name
' End If
' MsgBox "Control activo del Formulario" & ActiveControl.Name & _
' vbCr & "Control activo del marco1" & ActiveControl.Name & _
' vbCr & "Control activo del marco2" & ActiveControl.Name
'
'
' MsgBox ActiveControl.Name
End Sub





"Héctor Miguel" escribió en el mensaje
news:
hola, Des !

> De lo que me dices deduzco que el hecho de que un control de un marco sea el control activo
> o tenga foco excluye que el marco sea el control activo.
> Es decir, no es como en una hoja que si un de sus celdas es la activa implica que la hoja


tambien lo es.

[mas bien] la deduccion debe ser que la propiedad activecontrol 'identifica' al control activo del


*contenedor* activo
y los contenedores pueden ser objetos userform, frame o [multi]page

prueba con un formulario que contenga los siguientes controles:
-> nivel1 [el formulario]: un commandbutton y un frame
nivel2 [primer frame]: un commandbutton y otro frame
nivel3 [segundo frame]: un commandbutton

copia/pega el siguiente codigo para los commandbutton [observa que te reporta el tercer


commandbutton]

Private Sub CommandButton1_Click()
MsgBox ActiveControl.Name
End Sub
Private Sub CommandButton2_Click()
If TypeName(ActiveControl) = "Frame" Then
MsgBox Frame1.ActiveControl.Name
Else
MsgBox ActiveControl.Name
End If
End Sub
Private Sub CommandButton3_Click()
If TypeName(ActiveControl) = "Frame" Then
MsgBox Frame1.ActiveControl.Name
Else
MsgBox ActiveControl.Name
End If
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.


Respuesta Responder a este mensaje
#5 Ivan
25/07/2007 - 03:48 | Informe spam
hola chicos,

mientras vuelve Hector espero que no os moleste que meta baza, pero el otro dia, cuando vi la respuesta de Hector y me
lie a probarla, en un principio tampoco veia el sentido, creo que de puro sencillo que es el codigo, pero si te das
cuenta, creo que es totalmente descriptivo, sobre todo para esta parte de la consulta =>>

De lo que me dices deduzco que el hecho de que un control de un marco sea el control activo o tenga foco excluye
que el marco sea el control activo.
Es decir, no es como en una hoja que si un de sus celdas es la activa implica que la hoja también lo es





precisamente, y en mi opinion (que como tantas veces podria ser una ida de olla), el ej. viene a demostrar exactamente
lo contrario, es decir que si un control es el activo su contenedor ha de ser por fuerza el contenedor activo

de hecho, y siguiendo con la comparacion frame/hoja-control/celda, y aunque tampoco es exactamente lo mismo, en cierta
manera, si tu intentas seleccionar una celda sin ser su hoja la activa te dara un error, cosa que con los controles (no
ocultos de la forma que sea) no ocurre a la hora de mandarles el foco pero si lo estas haciendo desde un contenedor
diferente, (creo que) automaticamente te seleccionara el contenedor en vez del control en si mismo, es un poco como el
worksheet.activate previo al range("a2").select

y a la hora de referirte al contenedor activo creo que simplemente tambien te valdria con ActiveControl.Parent y para
verificar cual/que es este, estarian las comprobaciones que te comenta Hector

..y para terminar esta irrupcion, yo tambien me lie a hacer algunas adaptaciones del ej de Hector (aunque me temo que
como siempre se me fue la mano, y quizas lie mas que aclare)y este ej. que pongo es (+/-, el original no lo guardé) es
una de ellas. Seguramente al final no aclare nada sobre lo que ya aclaraba el de Hector, pero por si quieres echarle un
ojo ahi va:

en un formulario pon como minimo estos controles =>>

'' ComboBox1 -> Contenedor => UserForm2
'' ComboBox2 -> Contenedor => UserForm2
'' Label1 -> Contenedor => UserForm2
'' Label2 -> Contenedor => UserForm2
'' Label3 -> Contenedor => UserForm2
'' Label4 -> Contenedor => UserForm2
'' Frame1 -> Contenedor => UserForm2
'' TextBox1 -> Contenedor => Frame1
'' Frame2 -> Contenedor => Frame1
'' TextBox2 -> Contenedor => Frame2

aunque yo, como soy un poco exagerado, pues he metido todos estos =>>

'' OptionButton1 -> Contenedor => Frame1
'' OptionButton2 -> Contenedor => Frame1
'' CommandButton1 -> Contenedor => Frame1
'' TextBox3 -> Contenedor => Frame1
'' ListBox1 -> Contenedor => Frame1
'' CheckBox1 -> Contenedor => Frame2

' y aqui van los codigos --
'
Private Sub ComboBox1_Change()
Dim ct As Control, NombreEnCombo As String
On Error GoTo ComboBox1_Change_Error
borrarLabels
With ComboBox1
If .ListCount > 0 And .ListIndex > -1 Then NombreEnCombo = .Text
End With
Label1.Caption = "En combo: " & NombreEnCombo
With Frame1
For Each ct In .Controls
ct.Visible = False
Next
With .Controls(NombreEnCombo)
.Visible = True
.SetFocus
End With
Label2.Caption = "Activo: " & .ActiveControl.Name
End With
On Error GoTo 0
Exit Sub
ComboBox1_Change_Error:
MsgBox "Aqui, al estar oculto el contenedor no podrias activar el control." _
& vbCr & vbCr & "Mas o menos te ocurriria el siguiente Error:" & vbCr & vbCr & _
"Error " & Err.Number & " (" & Err.Description & _
") en el procedimiento ComboBox1_Change de tipo Sub " & _
"del Formulario: UserForm2"
End Sub

Private Sub ComboBox2_Change()
Dim ct As Control, NombreEnCombo As String
On Error GoTo ComboBox2_Change_Error
borrarLabels
With ComboBox2
If .ListCount > 0 And .ListIndex > -1 Then NombreEnCombo = .Text
End With
Label1.Caption = "En combo: " & NombreEnCombo
With Frame1
For Each ct In .Controls
ct.Visible = False
Next
With .Controls(NombreEnCombo)
If .Parent.Name <> .Name Then .Parent.Visible = True
.Visible = True
.SetFocus
End With
Label2.Caption = "Activo: " & .ActiveControl.Name
With .ActiveControl
If .Name <> NombreEnCombo And Left(.Name, 5) = "Frame" Then
Label3.Caption = "Parent nombre en combo: " & .Name
With Controls(.Name)
With .Controls(NombreEnCombo)
.Visible = True: .SetFocus
End With
End With
Label4.Caption = "Activo final: " & .Parent.Controls(.Name).ActiveControl.Name
End If
End With
End With
On Error GoTo 0
Exit Sub
ComboBox2_Change_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & _
") en el procedimiento ComboBox1_Change de tipo Sub " & _
"del Formulario: UserForm2"
End Sub

Sub borrarLabels()
Dim n As Byte
For n = 1 To 4
Me.Controls("Label" & n).Caption = ""
Next
End Sub

Private Sub UserForm_Initialize()
Dim ct As Control
For Each ct In Controls
If Left(ct.Name, 5) <> "Label" And _
Left(ct.Name, 8) <> "ComboBox" Then
ComboBox1.AddItem ct.Name
ComboBox2.AddItem ct.Name
End If
Next
borrarLabels
End Sub

un saludo
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida