gpt4 book ai didi

C# VS12 设计器在设计模式下保存自定义派生窗体时出错

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:38 26 4
gpt4 key购买 nike

我目前在 VS12 和内置设计器中遇到问题。我正在使用一个自定义控件框架,它基本上扩展了基本用户控件和 DevExpress 控件。一段时间以来,当我尝试更改属性或移动其中一个控件时,在设计模式下保存表单时遇到问题。我尝试尽可能好地翻译错误消息(我使用的是德语版的 VS)。

Visual Studio Designer Error Message:
Error during code generation for the MyPropertyMap-property. Error: The property accessor for the MyPropertyMap for the settings object has caused an exception: The enumeration has changed. Enumeration could not be executed.

我尝试使用另一个启用了 CLR 调试的 visual studio 实例来调试设计器异常:

System-InvalidOperationException
The enumeration has changed. Enumeration could not be executed.
Source: CustomForm
StackTrace: MyNamespace.Controls.CustomForm.get_FormVariables()
TargetSite: System.Collections.Hashtable get_FormVariables()

看起来设计师试图访问表单上的属性,尽管我试图使用以下代码对设计师隐藏它:

[NonSerialized]
private Hashtable formVariables = null;
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
public Hashtable FormVariables
{
get
{
...

我尝试添加 NonSerialized 字段,因为我认为属性的序列化可能会导致问题。 getter 基本上查询表单面板上的所有控件并将它们添加到哈希表中,因为我正在用它们做一些基于计时器的事情。但在设计期间,设计人员没有必要访问此属性。有什么建议我真的可以从设计者那里隐藏它​​并防止这个错误吗?

如果我错过了任何其他重要的输入,请告诉我。

编辑:

我仍在努力找出导致问题的原因。我发现的一件事是,当我在 visual studio 设计器设置中禁用优化代码生成设置时,错误一直发生。当我重新启用它时,第一次尝试保存表单时会发生一次错误 - 而在第二次尝试时不会 - 这意味着表单已保存。我现在不确定它是否一直如此 - 但至少在我尝试过的几次中是这样。

如果现在处于设计模式,所有与枚举或其他集合对象一起使用的公共(public)属性都被实现为返回 null。当设计人员尝试访问 getter 函数时,异常仍然发生。

亲切的问候。

最佳答案

我认为您应该在 getter 中设置对 DesingMode 的检查。 winforms 设计者 AFAIK 访问属性,无论设置了什么属性。

关于C# VS12 设计器在设计模式下保存自定义派生窗体时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18336512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com