无法将控件添加到表单中

时间:2011-11-16 20:44:43

标签: c# .net winforms user-controls

我正在尝试将Usercontrol添加到表单中。 UserControl与表单位于一个单独的项目中,但是在同一个解决方案中。我已将此控件添加到过去的其他表单中,但是,某些内容已更改,我收到以下错误:

  

“无法创建组件MessageDisplayListControl。   错误消息如下:   'System.Runtime.Serialization.SerializationException:在Assymbly AceXtremeNET中输入AceXtremeNET.Utilities.Message',版本= 10.0.0.273,......未标记为可序列化。在System.Runtime.Serialization.FormatterServices.InternalGetSerializableMember(RuntimeType类型)at ....“

控件确实已添加到.Designer.cs,但是它不会显示在可视GUI中。每次我尝试构建时,都会遇到多个错误,这些错误会产生与上面相同的基本错误,即'AceXtremeNET.Utilities.Message'不是可序列化的。

---------编辑------------------

我的控件具有以下属性,但问题出现了。

public IList<Message> MessageList {get{return _getList();} {set {_lostList(value);}}

控件中没有代码依赖于此属性,因为它意味着purley作为get / set访问器。 每当我注释掉代码时,Everything似乎都能正常工作。否则我可以上面提到的错误。我之前提到过,我收到了另一个关于构建的错误,看起来这是唯一一个尝试序列化的属性。

---------编辑(堆栈追踪)------------------

at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
at System.Runtime.Serialzation.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, SerializationBinder binder)
at System.Runtime.SerializationFormatters.Binary.ObjectWriter.WriteArray(WriteObjectInfo objectInfo, NameInfo memberNameInfo, WriteObjectInfo memberObjectInfo)
...

---------编辑(控制属性)------------------

public MessageControl MessageDisplay {get{return messageControl1;}} // This is another user control I created.  I've not had any problems with this control.
public MessageListBox {get { return listBox1; } }
public int MessageCount { get { return MessageListBox.Items.Count; }}
public bool ValidSelection { get { return (SelectedIndex >= 0 && SelectedIndex < MessageCount); } }
public Message SelectedMessage { get { return listBox1.SelectedItem as Message; } set { MessageDisplay.Message = Value; } }
public int SelectedIndex { get { return listBox1.SelectedIndex; } set { listBox1.SelectedIndex = value; } }

1 个答案:

答案 0 :(得分:6)

阅读DesignerSerializationVisibility Enumeration

将此属性放在MessageList属性

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

在这种情况下,设计人员将丢失MessageList中的用户更改 但如果你把它设置为

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

Designer会将属性内容保存在控制主机

的Designer.cs中