タイプ のユーザー コントロールにプロパティを追加しようとしていますIList<Control>
。UITypeEditor を実装して、フォームからコントロールの CheckedListBox をユーザーに表示し、ユーザーがどのコントロールを含めるかを識別できるようにしました。これはこれまでのところうまくいきます。
しかし、UITypeEditor を閉じようとすると、デザイナーは次の詳細を含む「プロパティ値が無効です」というメッセージを表示します。
Type 'System.Windows.Forms.Control' in Assembly 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.
これが TypeConverter によって解決されるかどうかはわかりませんが、そうである場合は TypeConverter がConvertTo
メソッドから何を返すべきかわかりません (コンストラクターから List を初期化できず、への参照が必要になるため)戻す方法がわからないコントロール)。
必要に応じて、コンストラクターからの初期化に関する問題が解決される場合は、型を Control[] に変更できます。
編集:私はこの TypeConverter を試しましたが、それをユーザー コントロールのプロパティに関連付けたにもかかわらず、まったく使用されていないようです。
class ControlListConverter : TypeConverter {
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
if (destinationType == typeof(InstanceDescriptor)) return true;
return base.CanConvertTo(context, destinationType);
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) {
if (destinationType == typeof(InstanceDescriptor) && value is IList<Control>) {
IList<Control> list = (IList<Control>)value;
ConstructorInfo ctor = typeof(List<Control>).GetConstructor(new Type[] {typeof(IEnumerable<Control>)});
if (ctor != null) {
return new InstanceDescriptor(ctor, new object[] { list });
}
}
return base.ConvertTo(context, culture, value, destinationType);
}
}