c# - 无法向窗体添加控件

标签 c# .net winforms user-controls

我正在尝试将用户控件添加到表单中。 UserControl 与表单位于不同的项目中,但位于同一解决方案中。我过去曾将此控件添加到其他表单,但是,有些东西发生了变化,我收到以下错误:

"Failed to create the component MessageDisplayListControl. The error message follows: 'System.Runtime.Serialization.SerializationException: Type AceXtremeNET.Utilities.Message' in Assymbly AceXtremeNET, Version=10.0.0.273,...... is not marked as serializable. at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMember(RuntimeType type) at ...."

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

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

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

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

控件中的任何代码都不依赖于此属性,因为它意味着 purley 作为获取/设置访问器。 每当我注释掉代码时,一切似乎都能正常工作。否则我会出现我上面提到的错误。正如我之前提到的,我在构建时收到了另一个错误,这似乎是唯一一个试图序列化的属性。

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

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)]

Designer会将Property Content保存在控件宿主的Designer.cs中

关于c# - 无法向窗体添加控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8158419/

相关文章:

c# - EF 和自动映射器。更新嵌套集合

c# - 如何在 Linq 中进行完全外部连接?

.net - WinDBG 的好扩展?

c# - 绘制格式化文本

c# - 使用 TextBox 过滤 Datagridview 行

c# - 使用 Windows 编解码器解码音频文件

c# - Task.WhenAll 的顺序版本

c# - 如何自动创建用户备份?

c# - 如何获取数据绑定(bind)的 ComboBox 以反射(reflect)对 BindingList 数据源所做的更改

c# - 如何在 C# 中更新 WebBrowser 控件内的 DOM 内容?