Leí acerca de como implementar este atributo usando la librería > PostSharp <, es muy sencillo implementarlo de forma básica la verdad, pero es un producto de pago y la "medicina" no funciona muy bien, de todas formas muestro un ejemplo por si a alguien le sirve:
Código
''' <summary> ''' Specifies the numeric range constraints for the value of a data field. ''' </summary> <Serializable> Class RangeAttribute : Inherits PostSharp.Aspects.LocationInterceptionAspect ''' <summary> ''' The minimum range value. ''' </summary> Private min As Integer ''' <summary> ''' The maximum range value. ''' </summary> Private max As Integer ''' <summary> ''' Initializes a new instance of the <see cref="RangeAttribute" /> class. ''' </summary> ''' <param name="min">The minimum range value.</param> ''' <param name="max">The maximum range value.</param> Public Sub New(ByVal min As Integer, ByVal max As Integer) Me.min = min Me.max = max End Sub ''' <summary> ''' Method invoked <i>instead</i> of the <c>Set</c> semantic of the field or property to which the current aspect is applied, ''' i.e. when the value of this field or property is changed. ''' </summary> ''' <param name="args">Advice arguments.</param> Public Overrides Sub OnSetValue(ByVal args As PostSharp.Aspects.LocationInterceptionArgs) Dim value As Integer = CInt(args.Value) If value < min Then value = min ElseIf value > max Then value = max End If args.SetNewValue(value) End Sub End Class
En fin, si hay que implementarlo por uno mismo sin la ayuda de herramientas de terceros pues se implementa desde cero, pero ni siquiera conozco que Class debería heredar para empezar a crear un atributo de metadatos parecido al RangeAttribute, que funcione en WinForms, apenas puedo encontrar información sobre esto en Google/MSDN y todo lo que encuentro es para ASP.Net.
PD: Actualmente hago la validación del rango en el getter/setter de las propiedades, así que eso no contaría como "alternativa" xD.
Cualquier información se agradece,
Saludos!