我正在尝试将一个UserControl添加到一个表单中。该UserControl在与表单不同的项目中,但在同一解决方案中。我以前已经将此控件添加到其他表单中,但是现在出了问题,我遇到了以下错误:
“创建组件MessageDisplayListControl失败。错误消息如下: 'System.Runtime.Serialization.SerializationException:程序集AceXtremeNET中的类型AceXtremeNET.Utilities.Message,版本=10.0.0.273……未标记为可序列化。在System.Runtime.Serialization.FormatterServices.InternalGetSerializableMember(RuntimeType type) at …. '”
控件确实被添加到.Designer.cs文件中,但它没有显示在GUI上。每次我尝试构建时,我都会得到多个错误,这些错误都基本相同,都指出'AceXtremeNET.Utilities.Message'不可序列化。
--------- 编辑 ------------------
我的控件有以下属性,这似乎是问题所在。
请注意:在更改控件属性之前,请确保已保存您的工作。
“创建组件MessageDisplayListControl失败。错误消息如下: 'System.Runtime.Serialization.SerializationException:程序集AceXtremeNET中的类型AceXtremeNET.Utilities.Message,版本=10.0.0.273……未标记为可序列化。在System.Runtime.Serialization.FormatterServices.InternalGetSerializableMember(RuntimeType type) at …. '”
控件确实被添加到.Designer.cs文件中,但它没有显示在GUI上。每次我尝试构建时,我都会得到多个错误,这些错误都基本相同,都指出'AceXtremeNET.Utilities.Message'不可序列化。
--------- 编辑 ------------------
我的控件有以下属性,这似乎是问题所在。
public IList<Message> MessageList {get{return _getList();} {set {_lostList(value);}}
这个属性并没有被代码所依赖,它只是作为一个get/set访问器而存在。当我注释掉这段代码时,一切似乎都正常工作。否则,我会遇到上面提到的错误。我之前在构建过程中也遇到了另一个错误,并且看起来这是唯一一个试图被序列化的属性。
--------- 编辑(堆栈跟踪)------------------
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; } }