2
我想添加一個屬性到我的用戶控件的類型IList<Control>
,我已經實現了一個UITypeEditor來顯示用戶CheckedListBox控件的形式,並允許用戶確定要包含哪些控件。迄今爲止,這工作得很好。用戶控制與類型IList <Control> UITypeEditor引發異常「控制未標記爲可序列化」
但是,當我試圖關閉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應該從ConvertTo
方法返回什麼(因爲你不能從構造函數初始化列表,它會希望引用控件,我不知道如何傳回)。
如果需要,我可以將類型更改爲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);
}
}