フォームにInfragisticsUltraNumericEditor(バージョン5.3、かなり古い)コントロールがあります。
.Valueフィールドを.MinValue未満または.MaxValueより大きい値に設定すると、次のメッセージとともにSystem.Exceptionがスローされます。
'Value'プロパティは、'MinValue'および'MaxValue'プロパティによって決定された範囲外の値に設定することはできません
UltraNumericEditorの関連フィールドの署名は次のとおりです。
public object MinValue { get; set; }
public object MaxValue { get; set; }
public object Value { get; set; }
これはコードベースを通じて何百回も発生する可能性があるため、MinValueとMaxValueを毎回設定しようとしている値と比較するのではなく、コントロールをサブクラス化してチェックを入れたいと思いました。
public class OurNumericEditor : Infragistics.Win.UltraWinEditors.UltraNumericEditor
{
public object Value
{
get
{
return base.Value;
}
set
{
// make sure what we're setting isn't outside the min or max
// if it is, set value to the min or max instead
double min = (double)base.MinValue;
double max = (double)base.MaxValue;
double attempted = (double)value;
if (attempted > max)
base.Value = max;
else if (attempted < min)
base.Value = min;
else
base.Value = value;
}
}
}
値のタイプ、MinValueおよびMaxValueをdoubleにキャストできる場合、これは明らかに正常に機能しますが、それが不可能な場合は、InvalidCastExceptionが予想されます。
今、私はここで金髪の瞬間を過ごしているかもしれませんが、ジェネリックスを使用して比較を行うメソッドを作成することは可能であると思いますが、それがどのように見えるかを視覚化するのに苦労しています。
何かアイデアや意見はありますか?
ありがとう
トム