Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: YAcosta 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
-
declara al principio del usercontrol:
Public Event Change() (lo de public no hace falta)
y despues, buscas el evento del text:
Private Sub Text1_Change()
RaiseEvent Change
End Sub
saludos
-
Chanfleee eso es todo??? igual puedo hacer con todos los demas eventos entonces????
Gracias men!!!!
-
Ups, una cosa mas.
Si dentro tengo 3 textbox. No hay problema si le hago
RaiseEvent Change
a cada uno de ellos no?
-
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...
-
Problema resuelto gracias!!!
-
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.
-
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.
-
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? (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.
-
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.
-
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.
-
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? (http://www.4shared.com/file/4WhL9T-v/ProyCorrigiendoseMiUctext.html?)
-
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.
-
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
(http://s1.postimage.org/g3dbcoec/atributos_del_procedimiento.jpg) (http://postimage.org/image/g3dbcoec/)
-
Me matas!!! que buena, voy a probarla al tiro
-
Solo para decir: Lolabyte funcionó PERFECTO!!!
Muchas Gracias.