无法向窗体添加控件

本文关键字:添加 控件 窗体 | 更新日期: 2023-09-27 18:14:46

我想添加一个Usercontrol到一个表单。UserControl位于与表单不同的项目中,但处于相同的解决方案中。我过去曾将此控件添加到其他表单中,但是,有些东西发生了变化,我得到以下错误:

"创建组件MessageDisplayListControl失败。"错误信息如下:System.Runtime.Serialization.SerializationException: Type AceXtremeNET.Utilities。消息' in assembly AceXtremeNET, Version=10.0.0.273,......未标记为可序列化的。在System.Runtime.Serialization.FormatterServices。InternalGetSerializableMember(RuntimeType类型)在...."

控件确实被添加到.Designer.cs中,但是,它没有显示在可视化GUI中。每次尝试构建时,我都会得到多个错误,这些错误给出了与上面相同的基本错误,即"AceXtremeNET.Utilities"。消息'不可序列化。

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

我的控件有以下属性,这似乎是问题。

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; } }

无法向窗体添加控件

阅读DesignerSerializationVisibility Enumeration

将此属性设置为MessageList属性

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
在这种情况下,

设计者将丢失MessageList中的用户更改但是如果你把它设为

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

设计器将控件host

的属性Content保存在Designer.cs中