私は次の解決策を思いついた:
Private Sub NumericEditor_BindingContextChanged(sender As Object, e As EventArgs) Handles Me.BindingContextChanged
If DataBindings.Count > 0 AndAlso DataBindings.Item("Value") IsNot Nothing Then
Dim myPropDescs As PropertyDescriptorCollection = DataBindings.Item("Value").BindingManagerBase.GetItemProperties
Dim propertyName As String = DataBindings.Item("Value").BindingMemberInfo.BindingField
Dim bindingType As Type = myPropDescs.Find(propertyName, False).PropertyType
Select Case bindingType
Case GetType(SByte)
DecimalPlaces = 0
MinimumValue = SByte.MinValue
MaximumValue = SByte.MaxValue
Case GetType(Byte)
DecimalPlaces = 0
MinimumValue = Byte.MinValue
MaximumValue = Byte.MaxValue
Case GetType(Int16)
DecimalPlaces = 0
MinimumValue = Int16.MinValue
MaximumValue = Int16.MaxValue
Case GetType(UInt16)
DecimalPlaces = 0
MinimumValue = UInt16.MinValue
MaximumValue = UInt16.MaxValue
Case GetType(Int32)
DecimalPlaces = 0
MinimumValue = Int32.MinValue
MaximumValue = Int32.MaxValue
Case GetType(UInt32)
DecimalPlaces = 0
MinimumValue = UInt32.MinValue
MaximumValue = UInt32.MaxValue
Case GetType(Int64)
DecimalPlaces = 0
MinimumValue = Int64.MinValue
MaximumValue = Int64.MaxValue
Case GetType(UInt64)
DecimalPlaces = 0
MinimumValue = UInt64.MinValue
MaximumValue = UInt64.MaxValue
Case GetType(Single), GetType(Double), GetType(Decimal)
MinimumValue = Decimal.MinValue
MaximumValue = Decimal.MaxValue
End Select
End If
End Sub
少し繰り返しなので、それほどエレガントではありませんが、機能します。(私の実際のコードには、開発者がすでにこれらのプロパティを設定している場合に、MinimumValueとMaximumValueを設定するときにもチェックがあり、開発者の設定がまだ有効である場合にオーバーライドされないようにします。)