• Domingo 22 de Diciembre de 2024, 08:32

Autor Tema:  Pregunta....  (Leído 1705 veces)

ferhn

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Pregunta....
« en: Viernes 8 de Agosto de 2008, 18:23 »
0
En un formulario tengo un txt llamado txtAA y quiero q al ingresar cualquier numero me lo muestre tambien en otro txt llamando txtA que esta dentro de una OCX q hice dentro del mismo formulario  tengo lo siguiente:
Código: Text
  1.  
  2. 'En el Formulario
  3. Private Sub txtAA_Change()
  4.     ucFormula1.A = Me.txtAF.Text   'Para llamar a la ocx llamada ucFormula1
  5. End Sub
  6.  
  7. 'En la OCX
  8. Dim iA as String
  9. Public Property Get A() As String
  10.     A = Val(iA)
  11. End Property
  12.  
  13. Public Property Let A(ByVal vA As String)
  14.     If IsNumeric(vA) Then
  15.         If Val(vA) >= 0 And Val(vA) < 1000 Then
  16.             iA = vA
  17.         Else
  18.             iA = 1
  19.         End If
  20.     Else
  21.         iA = 1
  22.     End If
  23. End Property
  24.  
  25.  

Cuando modifico txtAA no me lo muestra en txtA, pero si modifico txtA si lo muestra en txtAA y debe ser en ambos lados igual otro problema que tengo es q dentro de txtAA debe ser un numero entre 0 y 1000 ahi estoy bien pero en txtA q esta en la Ocx debe ser entre 1 y 799 en la ocx tengo lo siguiente:
Código: Text
  1.  
  2. Private Sub txtA_Change()
  3.     If txtA.Text >= 0 And txtA.Text <= 799 Then
  4.         iA = txtA.Text
  5.     Else
  6.         txtA.Text = Val(txtA.Text)
  7.     End If
  8. End Sub
  9.  
  10.  

No se cual es el problema, les agradeceria si ayudan a saber en que me estoy equivocando.....  :wacko:

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Pregunta....
« Respuesta #1 en: Domingo 31 de Agosto de 2008, 20:36 »
0
Ya te he respondido en el mensaje anterior... aquí sólo quría corregirte acerca de la propiedad...

En un OCX las propiedades si han cambiado deben anunciarse para que las rutinas Readproperty y writeproperty actualicen correctamente los datos.
Si tu propiedad era:
 
Código: Text
  1. Public Property Let A(ByVal vA As String)
  2.     If IsNumeric(vA) Then
  3.         If Val(vA) >= 0 And Val(vA) < 1000 Then
  4.             iA = vA
  5.         Else
  6.             iA = 1
  7.         End If
  8.     Else
  9.         iA = 1
  10.     End If
  11. End Property
  12.  

Debe quedar algo así como:

Código: Text
  1.  
  2. private p_ValorMax as integer ' almacena el valor de la propiedad ValorMax
  3. Public Property Let ValorMax(ByVal v As integer)
  4.     if v>=0 and v<1000 then
  5.         p_ValorMax=v
  6.         PropertyChanged "ValorMax"
  7.     else
  8.         if p_ValorMax<>1 then
  9.             p_ValorMax=1
  10.             PropertyChanged "ValorMax"
  11.         else
  12.            ' no cambia nada y por tanto no es necesaro anunciar cambio de valor en la propiedad
  13.         end if
  14.     end if
  15. End Property
  16.  
  17.  

Otra cosa te indico si recibes un valor que ha de ser numérico el parámetro de la propiedad que sea numérico, si usan enteros pues un byte, integer ó long el que cubra el rango tolerado, y si es decimal un single o double, pero no un string, se pierde tiempo en convertir cadenas a valores luego a cadena lyuego otra vez a valores... deben hacerse las menos conversiones posibles... si tomas la propiedad de un control textbox, por ejemplo fíjate que ya la propiedad si su text no es numérico ya devuelve 0 salvo que que hagas un ValorMax=val(textbox1.text) y exista un texto que pueda valorarse numérico, como porejemplo ''299perro'' que tomaría 299... por tanto si te devuelve '0' ya no tienes que evaluar con la función isnumeric, sino sólo si está o no dentro del rango que tu querías mayor o igual a 1 y menor de 1000.
«Ma non troppo»
----> ModoVacaciones = False<----

ferhn

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Pregunta....
« Respuesta #2 en: Lunes 1 de Septiembre de 2008, 05:30 »
0
Bueno lo tomare en cuenta mañana lo revisare muchas gracias...