Problema con Propiedad.

19/11/2004 - 14:03 por Anibal | Informe spam
Hola,
Estoy haciendo una clase que realiza unos efectos con imagenes, y para eso
necesito pasarle a el constructor de la clase un control para contener y
mostrar la imagen, y una propiedad de tipo Image que sera donde se mostrará
la imagen.
El poblema es que si le paso un control y una propiedad, como referenciar la
propiedad pasada, o sea como hacer "Control.Propiedad =".

Ustedes dirán que le pase directamente la propiedad sin el control, pero es
necesario el control contenedor ya que tengo que dibubjar sobre él y
refrescarlo constantemente con .Refresh o .Invalidate.

Tambíen podría pasar un objeto de tipo Control y usar la propiedad
BackroundImage que tienen todos los controles, pero esto le saca
flexibilidad a la clase, ya que hay una cantidad grande de ejemplos que
quiero implementar donde necesito la propiedad BackroundImage para otra
cosa. Lo que más me serviría es que se pueda elegir la propiedad a usar.

Lo otro sería pasar un PictureBox, pero tambbién estoy limitando la
flexibilidad de la clase, ya que necesito que se pueda usar en cualquier
contol que tenga una propiedad de tipo Image.
 

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
19/11/2004 - 16:29 | Informe spam
Pasale la instancia del control y el nombre de la propiedad. Usando
reflection desde la clase podras entonces usar la propiedad. Por ejemplo:

Class MiClase

Private _prop As Reflection.PropertyInfo
Private _control As Control

Sub New(ByVal control As Control, ByVal propiedad As String)

' Obtengo el tipo de control
Dim t As Type = control.GetType

' Obtengo la propiedad
_prop = t.GetProperty(propiedad)

' Verifico que se devolvio la propiedad
If _prop Is Nothing Then
Throw New ArgumentException("El control no posee la
propiedad")
End If

' Verifico que la propiedad devuelva
' el tipo Image o una subclase de el
If Not
GetType(Drawing.Image).IsAssignableFrom(_prop.PropertyType) Then
Throw New ArgumentException("La propiedad no es de tipo
Image")
End If

_control = control

End Sub

Public Property PropertyValue() As Object
Get
' Devuelvo el valor de la propiedad
Return _prop.GetValue(_control, Nothing)
End Get
Set(ByVal Value As Object)
' Asigno el valor a la propiedad
_prop.SetValue(_control, Value, Nothing)
End Set
End Property

End Class

Eduardo A. Morcillo [MS MVP VB]

Preguntas similares