1
イベントの基本クラスを持つゲームのエディタを作成しようとしていますが、実際にはそれぞれの種類の別のクラスすべてのものを行う。PropertyGridのオブジェクトの「値」プロパティを表示する方法
したがって、PropertyGridに表示されるBaseEventのリストがあり、リストとしてコレクションエディタが開きます。私はTypeConverterを用意しましたので、 "Value"プロパティに表示されているすべての派生クラスをドロップダウンしました。
派生クラスのプロパティは、「値」の子として表示されますが、BaseEventからプロパティを表示すると、「値」プロパティが消え、子がルートに表示されるため、イベントのタイプを変更できません。
"Value"プロパティをBaseEventプロパティと同時に表示させる方法はありますか? getPropertiesメソッドを通じて、およびカスタムのPropertyDescriptor:
//This allows to get a dropdown for the derived classes
public class EventTypeConverter : ExpandableObjectConverter
{
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(GetAvailableTypes());
}
/*
...
*/
}
[TypeConverter(typeof(EventTypeConverter))]
public abstract class BaseEvent
{
public bool BaseProperty; //{ get; set; } If I set this as a property, "Value" disappears
}
public class SomeEvent : BaseEvent
{
public bool SomeOtherProperty { get; set; }
}
//The object selected in the PropertyGrid is of this type
public class EventManager
{
public List<BaseEvent> Events { get; set; } //The list that opens the collection editor
}
私は "のように、すべての子どものクラスでBasePropertyをオーバーライドに構成され、回避策を見つけましたpublic new bool BaseProperty {get {return base.BaseProperty;}} "あまりエレガントではありませんが... – Osguima3