1

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+DataTypes」に変換できません。

Type コンバーターで Converter オーバーライドを使用してこれらをトラップし、DataTypes の Enum に変換できると想定していますが、プロパティ グリッドをダブルクリックまたは「mouseewheeling」する代わりにドロップダウンから選択すると、なぜプロパティ グリッドが失敗するのでしょうか。落ちる?

4

1 に答える 1

3

コンボボックスのドロップダウンから選択すると、値は文字列として返されます。それがなぜなのかはわかりませんが、以前に起こったことはあります。基本的に、マウスホイールをダブルクリックまたはスクロールすると、値のコレクションから値が変更されますが、ドロップダウンから選択することは、フィールド値を文字列として編集するようなものだと思います。次に、値を文字列から列挙値に変換します。

于 2008-09-22T10:38:34.140 に答える