mmm, hoy si ya te entendi lo que vs queres hacer jejejeje!
Vaia mira, HASTA DOND YO C, no c puede hacer lo que intentas hacer, ¿sabes por que?
Vaia creo q eso que vs intentas en ningun control de VS que se comporte de esa manera, que al deshabilitar una onda, deshabilites algo o que ya no te apareza, por la misma razon que cuando estas en tiempo diseño por logica el compilador ya dibujo y carga todas sus propiedades en ese momento, entonces hasta donde yo se eso no se puede hacer.
Te pongo un ejemplo claro en los controles de VS, has visto el control 'DateTimePicker', si te fijas tiene una propiedad llamada Format (creo jejeje
), vaia entonces si te fija entre el listado que contiene, tiene una que se llama Custom, entonces, tambien en el mismop control existe otra propiedad FormatCustom que es donde pones el formato cuando el usuario elige en format que sea 'CUSTOM'.
Entonces si partieramos de tu logica de lo q intentas hacer, MS en su parte lo q tuvo q hacer es ocultar esa propiedad cuando no seleccione le usuario 'Custom', pero si te fijas no lo hizo asi, la propiedad siempre esta dispnible y habilitada en todo momento, lo que pasa es que no le hace caso, entonces aunq ponga cualquier onda, el compilador no le va hacer caso a esa propiedad hasta que en el otro lado no se alla activado 'Custom'
Entonces como vimos, al parecer no se puede, xq ni MS lo ha hecho, y siguiendo la logica de diseño de un Form, tampoco se puede, asi cambiar en tiempo real. Pero bueno yo simularia lo mismo que te explique con lo que hace MS con su control DateTimePicker
¿Por tanto como nos quedaria?Primero modificando tu clase me quedaria de la siguiente manera:
Public Class TypeCajaTexto
Enum PosiblesTipos As Integer
[False]
SoloNumeros
ConDecimales
End Enum
Private tipos_ As PosiblesTipos
Private Num_ As Integer
Private Dec_ As Single
Private Val As String
Property SolamenteNumeros() As PosiblesTipos
Get
Return tipos_
End Get
Set(ByVal value As PosiblesTipos)
tipos_ = value
EvaluacionNum(tipos_, Val)
End Set
End Property
Property Valor() As String
Get
Return Val
End Get
Set(ByVal Value As String)
Val = Value
EvaluacionNum(tipos_, Val)
End Set
End Property
Private Sub EvaluacionNum(ByVal Tipo As PosiblesTipos, ByVal Val As String)
'Primero verificamos que no este vacio, el cambo de VAL para hacer algun cambio
If String.IsNullOrEmpty(Trim(Val)) Then
'Ponemos a Cero las variables que contiene nuestro numero
Num_ = 0
Dec_ = 0
Exit Sub
End If
'Verificamos que tipo de dato es el valor que tenemos para hacer la conversion
Select Case Tipo
Case PosiblesTipos.SoloNumeros
If Not Integer.TryParse(Val, Num_) Then Throw New InvalidCastException("Error en la conversion del numero ingresado. Verifique que alla ingresado un numero")
Case PosiblesTipos.ConDecimales
If Not Single.TryParse(Val, Dec_) Then Throw New InvalidCastException("Error en la conversion del numero ingresado. Verifique que alla ingresado un numero")
End Select
End Sub
End Class
Entonces, al final solo te quedaria poner o hacer dos metodos que te retonen el valor ya sea Num o Dec, que contenga tus numero y eso creo q asi como funciona tu contorl.
PD. Tenia un error de sintaxis en la Enumeracion, para cuando querras poner nombres propios del compilador como FALSE, lo debes de poner en [] para que no tengas problemas!