プロパティ グリッド オブジェクトがコンボ ボックスの選択に失敗するが、コンボボックスをスクロールまたはダブルクリックすると OK
-
02-07-2019 - |
質問
C# にプロパティ グリッドがあり、「PropertyAdapter」オブジェクト (適切なタグで関連するプロパティを表示するオブジェクトの 1 つを囲む基本的なラッパー) をロードしています。
次の 2 つのメソッドを使用して、プロパティ グリッドで使用できる値を Decimal と Integer に制限したいので、プロパティの 1 つ (DataType、可能な値の列挙を返す) に TypeConverter を持っています。
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(new List<Constants.DataTypes>() { Constants.DataTypes.Decimal, Constants.DataTypes.Integer });
}
これはプロパティ グリッド上で希望通りに表示されており、プロパティ グリッド内のプロパティ フィールドをダブルクリックすると、整数と小数がうまく切り替わります。同様に、マウス ホイールを使用して、プロパティ フィールドのコンボボックス内のオプションをスクロールできます。
ただし、プロパティ フィールドをコンボ ボックスとして使用し、ドロップダウンから値を選択すると、標準のプロパティ グリッド エラー ボックスが表示され、次のエラーが表示されます。
タイプ 'System.String'のオブジェクトは、 'pelion.pm3.utils.constants+データタイプ'に変換することはできません。
タイプ コンバーターのコンバーター オーバーライドを使用してこれらをトラップし、DataType の列挙型に変換できると想定していますが、プロパティ グリッドをダブルクリックまたは「マウスホイール」する代わりにドロップダウンから選択すると失敗するのはなぜでしょうか。落ちる?
解決
コンボ ボックスのドロップダウンから選択すると、値が文字列として返されます。それがなぜなのかはわかりませんが、以前にもそのようなことが起こったのを見たことがあります。基本的にダブルクリックまたはマウスホイールのスクロールは値コレクションの値を変更しますが、ドロップダウンから選択することはフィールド値を文字列として編集することに似ていると思います。次に、値を文字列から列挙値に変換します。