• Lunes 29 de Abril de 2024, 00:27

Autor Tema:  Ayuda Con Funcion  (Leído 2456 veces)

m@gnus

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Ayuda Con Funcion
« en: Lunes 15 de Mayo de 2006, 16:39 »
0
:D  :D


Primero que nada saludos para este gran foro, mi problema es con la siguiente  funcion, esta me sirve para cambiar el color de textbox a amarillo cuando este se encuentre activo. o en teoria hace eso, el problema es que en la linea marcada con asteriscos me marca un error y no se que hacer, agradeceria su ayuda de antemano...


El error k se muestra es el siguiente:   ;)

Código: Text
  1.  
  2. Run-Time error '438': El objeto no soporta la propiedad o metodo.
  3.  
  4.  


Codigo de la funcion


Código: Text
  1.  
  2.  
  3. Function ChangeColor()
  4.  
  5.  
  6. Dim ctl As Control
  7.    
  8.    For Each ctl In Me
  9.  
  10. ***    If ctl.ControlType = acTextBox Then
  11.  
  12.          ctl.BackColor = vbWhite
  13.  
  14.    End If
  15.  
  16.    Next ctl  
  17.  
  18.    Me.ActiveControl.BackColor = vbYellow
  19.  
  20. End Function
  21.  
  22.  
  23.  

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Ayuda Con Funcion
« Respuesta #1 en: Lunes 15 de Mayo de 2006, 17:12 »
0
Un mejor método es colocar el cambio de color en los eventos GotFocus y LostFocus, por ejemplo:
Código: Text
  1.  
  2. Private Sub Text1_GotFocus()
  3.     Text1.BackColor = &HC0FFFF
  4. End Sub
  5.  
  6. Private Sub Text1_LostFocus()
  7.     Text1.BackColor = &H80000005
  8. End Sub
  9.  

 :comp:

m@gnus

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Ayuda Con Funcion
« Respuesta #2 en: Lunes 15 de Mayo de 2006, 18:25 »
0
Estoy de acuerdo, pero en este caso esta funcion le cambia el color a 15 texbox en una forma, y para eso es la funcion, te imagunas poner todo eso a cada texbox ???????

Solo es la forma mas optima.....

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: Ayuda Con Funcion
« Respuesta #3 en: Lunes 15 de Mayo de 2006, 18:52 »
0
Hola m@gnus.
Revisa en la ayuda del VB la función TypeOf que sirve para averiguar qué tipo de control es un control específico que se pasa como parámetro. Ciertamente ningún control cuenta con la propiedad "ControlType".
Disculpa que no coloque un ejemplo pero la verdad en este momento no recuerdo cómo se usa la función ni tengo el VB para probar.


Saludos y suerte


DiabloRojo

Widark

  • Miembro MUY activo
  • ***
  • Mensajes: 246
    • Ver Perfil
Re: Ayuda Con Funcion
« Respuesta #4 en: Lunes 15 de Mayo de 2006, 23:50 »
0
Que tal M@gnus!

Como lo comenta DiabloRojo, la función TypeOf te servira en este caso. Te recomendaria que validaras los controles en el For, así
Código: Text
  1. For Each ctl In Me.Controls
  2.  
No se como llamas a la función pero deberias validar que el control activo no sea uno diferente de un textbox.

Espero ayude de algo.
[:], Yo si se lo que es trabajar duro, por que lo he visto.
http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
NoSolocodigo --> Blog de Articulos

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
Re: Ayuda Con Funcion
« Respuesta #5 en: Martes 16 de Mayo de 2006, 00:00 »
0
Tienes un problema...
La rutina que mostraste:
Código: Text
  1. Function ChangeColor()
  2.     Dim ctl As Control
  3.     For Each ctl In Me
  4.         If ctl.ControlType = acTextBox Then
  5.             ctl.BackColor = vbWhite
  6.         End If
  7.     Next ctl
  8.     Me.ActiveControl.BackColor = vbYellow
  9. End Function
  10.  

Es correcta en principio, solo que el problema es de donde la vas a llamar, por ejemplo si la llamas desde un control que no sea de texto, ese control tomará el foco y será el activo de esa forma y te marcará el error "Run-Time error '438': El objeto no soporta la propiedad o metodo."
Así que mi sugerencia sigue en pie, aunque tengas que colocar el código en los 15 cuadros de texto.

 :whistling:

Soultaker

  • Miembro HIPER activo
  • ****
  • Mensajes: 972
  • Nacionalidad: pe
    • Ver Perfil
Re: Ayuda Con Funcion
« Respuesta #6 en: Martes 16 de Mayo de 2006, 04:55 »
0
Prueba con esto
Código: Text
  1. Function ChangeColor()
  2.    Dim ctl As Control
  3.    For Each ctl In Me.Controls
  4.       If TypeOf ctl Is TextBox Then
  5.          ctl.BackColor = vbWhite
  6.       End If
  7.    Next ctl
  8.    Me.ActiveControl.BackColor = vbYellow
  9. End Function
  10.  

 :comp:
http]
foros,programacion, c, c++, java,
linux, videojuegos, directX, .NET,
visual basic,robotica,microprocesadores

Para los nuevos usuarios de este Foro, por favor leerse esta discusión.
Cómo Hacer Preguntas De Forma Inteligente

Ojos que no ven... pisan caquita
Camarón que se duerme... muere electrocutado


<<< Harol Moreyra Bendezú >>>

m@gnus

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Ayuda Con Funcion
« Respuesta #7 en: Martes 16 de Mayo de 2006, 05:39 »
0
Thanks Soultaker una excelente solucion con el typeof............


 :lol:  :lol:  :lol:


!!!!!!!Saludos

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: Ayuda Con Funcion
« Respuesta #8 en: Martes 16 de Mayo de 2006, 15:44 »
0
Bueno, por algo dicen que todos los caminos conducen a Roma. Aquí otra solución pero usando un timer (creo, a la vista del código enviado por Soultaker, me compliqué la vida :nosweat:). Lo dicho, usé un timer con la propiedad interval en 100 y usé este código:

Código: Text
  1.  
  2. Private Sub Timer1_Timer()
  3.     Dim ctrl As Control
  4.    
  5.     If TypeOf Form1.ActiveControl Is TextBox Then
  6.        For Each ctrl In Form1.Controls
  7.           If TypeOf ctrl Is TextBox Then
  8.              If Form1.ActiveControl.Name = ctrl.Name Then
  9.                 ctrl.BackColor = vbBlue
  10.              Else
  11.                 ctrl.BackColor = vbWhite
  12.              End If
  13.           End If
  14.        Next
  15.     Else
  16.        For Each ctrl In Form1.Controls
  17.           If TypeOf ctrl Is TextBox Then
  18.              ctrl.BackColor = vbWhite
  19.           End If
  20.        Next
  21.     End If
  22. End Sub
  23.  
  24.  

Es que no me podía quedar sin mandarlo :rolleyes: Jejejeje...


Saludos


DiabloRojo