Autor Tema: Heredar Evento  (Leído 6269 veces)

0 Usuarios y 1 Visitante están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Heredar Evento
« en: Junio 16, 2011, 12:44:57 am »
A la mela, ya me maree, estoy muy lento. No logro heredar un evento.
Tengo un UC donde extiendo propiedades al textbox. Pero no tengo el evento Change en el UC, entonces quiero obtenerlo (supongo que es asi) desde el textbox que tengo dentro del UC y poder exponerlo. ¿Que debo hacer?

Gracias
Me encuentras en YAcosta.com

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Heredar Evento
« Respuesta #1 en: Junio 16, 2011, 12:58:32 am »
declara al principio del usercontrol:
Código: (vb) [Seleccionar]
Public Event Change() (lo de public no hace falta)

y despues, buscas el evento del text:
Código: (vb) [Seleccionar]
Private Sub Text1_Change()
      RaiseEvent Change
End Sub

saludos
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Heredar Evento
« Respuesta #2 en: Junio 16, 2011, 01:02:02 am »
Chanfleee eso es todo??? igual puedo hacer con todos los demas eventos entonces????


Gracias men!!!!
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Heredar Evento
« Respuesta #3 en: Junio 16, 2011, 01:04:27 am »
Ups, una cosa mas.
Si dentro tengo 3 textbox. No hay problema si le hago
RaiseEvent Change
a cada uno de ellos no?
Me encuentras en YAcosta.com

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Heredar Evento
« Respuesta #4 en: Junio 16, 2011, 01:05:32 am »
se, eso es todo... para los dema eventos, copia los parametros del evento original del control y luego pegalos en la declaracion de tu evento:
Public Event xxxx (params)

y para lo de los 3 textbox, no no hay problema...
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Heredar Evento
« Respuesta #5 en: Junio 16, 2011, 01:06:40 am »
Problema resuelto gracias!!!
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Heredar Evento
« Respuesta #6 en: Junio 16, 2011, 04:31:25 am »
Vuelvo a abrir el hilo, sorry.
Herede el evento change y keypress. El control puesto en funcionamiento se llamar txtTit
El problema esta que quiero hacer esto:
If Len(txtTit) > 0 Then y me dice que "El objeto no admite esa propiedad o método". No entiendo, tengo que hacer
por cada una de las funciones existentes alguna declaración dentro del UC? o que estoy entendiendo mal.
 Gracias.

Me encuentras en YAcosta.com

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Heredar Evento
« Respuesta #7 en: Junio 16, 2011, 05:09:53 am »
Saludos Compadre !!!

Este (colocado en el UC) código lo acabo de probar y funciona...

Public Property Get Text() As String
    Text = Text1.Text
End Property

Public Property Let Text(ByVal Txt As String)
    Text1.Text = Txt
    PropertyChanged "Text"
End Property


Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
    On Error GoTo Controlador
    Text = PropBag.ReadProperty("Text", Extender.Name)
    Exit Sub
'//
'//
Controlador:
                   If Err = 13 Then Exit Sub
End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
    PropBag.WriteProperty "Text", Text1.Text, Extender.Name
End Sub

En donde "Text1" (OJO: dije Text1, para no confundir con Text) colocarás el nombre que le asignaste al TextBox. Cuando hagas uso del UC, colocas:
If Len(txtTit.Text) > o Then ---

El error te aparece, porque no le has creado la propiedad al UC, con el código anterior, el UC hereda la propiedad Text del TextBox.

Espero haberte ayudado en algo.

Saludos.
Manuel F. Borrego S.
Barcelona, Venezuela.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Heredar Evento
« Respuesta #8 en: Junio 16, 2011, 05:48:06 am »
Hola amigo, no logro corregirlo, tengo que volver a leer mi libro, hice algunos cambios segun lo que crei entenderte pero igual no me atraca el len.

Asi que lo regrese a como lo tenia antes de modificar y queria pedirte porfa si podias darle una checada, esta listo
para que lo descomprimas y abras el proyecto, le des F5 y escribe una letra en el primer textbox, alli se cae
y me marca error en el Len
http://www.4shared.com/file/5I7NKtGV/ProyFalladoUctext.html?

A este UC que originalmente trabaja bien le meti la mano y en UC puse mi nombre para distinguir lo bueno de lo malo.

Gracias y disculpa la molestia.
Me encuentras en YAcosta.com

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Heredar Evento
« Respuesta #9 en: Junio 16, 2011, 02:01:23 pm »
Mira Compadre, aclaremos algo... Yo soy papá !!! y con el código que enviaste de muestra para analizar, me pusiste a "parir como una madre" :'( (Je, Je, Je !!!) :D

Reviso, y reviso y reviso una y otra vez el código, todo perfecto (pero no entendí un caraj...!!! -je, je, je otra broma, tranquilo !!!)

Bueno, lo que no entendí bien fue el propósito de los 5 Textboxs que tienes en el UC. Ahora, cuando escribes este segmento de código:

If Len(txtTit) > 0 Then
   MsgBox ("Aqui me caigo")
End If

La parte "Len(txtTit)" la corriges: Len(txtTit.Text):

If Len(txtTit.Text) > 0 Then
   MsgBox ("Aqui me caigo")
End If

El que se cayó fui yo, porque al aplicar puntos de interrupción, el evento Change lo lee, pero siempre el Len lo daba como '0' y ahí era cuando despues de varias veces de intentarlo infructuosamente, iba a tomar la decisión de pararme encima de mi PC, y arrojarme al vacío (je, je, je !!! otra vez con las bromitas, ¿no?). Esto pasa, porque está leyendo los cambios que suceden en el TextBox2 del UC, porque al colocar "Text1.Text = New_Text", "Text2.Text = New_Text",......"Text5.Text = New_Text", siempre tomará los valores del TextBox5, cuya propiedad 'Text' es siempre = "".

Ahora en el Código del UC:

Public Property Get Text() As String
    Text = Text1.Text
    Text = Text2.Text   '-----------------> Agregas esta línea...
End Property

Public Property Let Text(ByVal New_Text As String)
    Text1.Text = New_Text
    Text2.Text = New_Text
    'Text3.Text = New_Text  '---|
    'Text4.Text = New_Text  '    |------> Estas 3 las inhibes, quemas, borras, desapareces. etc, etc...
    'Text5.Text = New_Text  '---|

    PropertyChanged "Text"
    UserControl_Resize
End Property

Pruébalo, y por favor dime como te resultó !!! (las probé y funcionaron !!!)



Saludos !!!
Manuel F. Borrego S.
Barcelona, Venezuela.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Heredar Evento
« Respuesta #10 en: Junio 16, 2011, 02:05:18 pm »
Gracias ilustradisimo!!!

Mira, el UC original yo no lo cree, lo use cuando lo entendi al 80% y el 20% restante es el que me da problemas jeje.

Entiendo que estan los 5 textbox porque el 3,4 y 5 tienes los scroll, la verdad no creo usar mi control con scroll asi que mejor lo borrare.
Voy a hacer la modificación que indicas.

Muchas gracias por la ayuda, serás sabiamente recompensado.
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Heredar Evento
« Respuesta #11 en: Junio 16, 2011, 02:17:05 pm »
Ya funciona, y ya creo entender el problema.
Siempre he usado if len(miText) = 0 then,..... sin poner el .Text porque ese control ya trae preestablecida la propiedad Text
y por eso no era necesario mencionarlo. Ahora que uso mi contron miUCText entonces este control no tiene preestablecida
esa propiedad y por tanto se cae, y por ello tendria que usarlo asi: len(miUCText.Text), lo que me lleva a la siguiente pregunta
¿Como podria hacer para que el control de usuario lleve ya esa propiedad preestablecida o predeterminada y evitarme poner
el .Text y lograr que la costumbre de 10 años triunfe al poner siempre el nombre del control (caso TetBox y Label, los demas si le señalo
la propiedad)

Gracie
EDITADO: Ya, aqui el control sin scroll y con un solo textbox. Solo me falta que el UC tenga por omisión la propiedad
Text de tal manera que pueda hacer miUCText = "Watson"

http://www.4shared.com/file/4WhL9T-v/ProyCorrigiendoseMiUctext.html?
« última modificación: Junio 16, 2011, 02:42:22 pm por YvanB »
Me encuentras en YAcosta.com

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Heredar Evento
« Respuesta #12 en: Junio 16, 2011, 03:47:53 pm »
Ya ví tu ejemplo (corregido), está perfecto !!!

Con respecto a que la propiedad "Text" sea reconocida automáticamente cuando se esté haciendo uso del UC... ahí si me jo...!!! Porque eso se lograría (creo, digo, pienso, etc, etc, etc) con el uso de API's [de la(s) cual(es) no tengo ni la más pu... idea de cual(es) es(son)].
De momento tendrás que hacer el "supremo esfuerzo" y colocar '.Text'  ;D

Seguimos en contacto !!!

Manuel F. Borrego S.
Barcelona, Venezuela.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

Lolabyte

  • Bytes
  • *
  • Mensajes: 35
  • Reputación: +15/-0
    • Ver Perfil
Re:Heredar Evento
« Respuesta #13 en: Junio 25, 2011, 09:23:03 pm »
Para que tu propiedad Text sea la predeterminada debes hacer lo siguiente, abrir el codigo fuente del uc, ir al menu herramientas, luego a atributos del procedimiento, en el cuadro de dialogos ir a nombre, buscar text, presionar boton avanzados, en Id. del procedimiento cambiarlo a predeterminado, presionar boton aceptar y guardar.
Internamente vb6 agrega una linea de codigo "invisible para tus ojos", si abres tu uc con el notepad la puedes ver

Public Property Get Text() As String
Attribute Text.VB_UserMemId = 0 <---- :o
Text = txtRaiz.Text
End Property




YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Heredar Evento
« Respuesta #14 en: Junio 25, 2011, 09:25:26 pm »
Me matas!!! que buena, voy a probarla al tiro
Me encuentras en YAcosta.com