在 Visual Studio 的设计视图中打开表单 (.cs) 会立即显示未保存的更改

Posted

技术标签:

【中文标题】在 Visual Studio 的设计视图中打开表单 (.cs) 会立即显示未保存的更改【英文标题】:Opening Form (.cs) in Design View in Visual Studio Shows Unsaved Changes Immediately 【发布时间】:2016-08-12 20:42:20 【问题描述】:

我在一个 C# 项目中有一个表单,当它在“设计”视图中打开时表现异常。每当我在“设计”视图中打开表单时,它会立即在其选项卡上的表单名称旁边放置一个星号 (*)。如果我在没有进行任何更改的情况下关闭它,系统会提示我保存更改。只有一种形式可以做到这一点。

如果我直接打开表单的代码,它不会以这种方式运行。如果我直接打开设计器代码,它不会这样。

但是,我可以复制一个奇怪的序列:

    打开设计器代码(不显示星号) 在“设计”视图中打开表单(现在两个选项卡都有一个星号) 一个。如果我现在尝试关闭任一选项卡,系统会要求我保存更改 乙。如果我关闭 Visual Studio,系统会要求我保存两个选项卡的更改(或者如果我在“设计”视图中打开表单之前同时打开了设计器代码和表单代码,则保存所有 3 个选项卡)。 切换到设计器代码选项卡。当我这样做时,“撤消”按钮启用,我可以选择撤消“设计器生成的代码”。但是,星号此时会消失,仅用于设计器代码选项卡。 一个。如果我撤消更改、复制代码、重做更改并比较代码,它们是相同的。 我现在可以关闭设计器选项卡,而不会被要求保存更改。不过,“设计”视图选项卡仍然有一个星号并要求保存更改。它还启用了“撤消”按钮,并带有撤消“设计器生成的代码”选项

当我在“设计”视图中打开表单时,如何阻止这些幻像(非实际)更改(非实际)?

注意:我的设置没有任何花哨或不标准的地方。单个开发人员每次都在同一台机器上,所有内容都保存到 VS 的默认位置,没有任何与 VS 相关的任何类型的第三方。

【问题讨论】:

代码是否在源代码管理中?如果是(而且应该是),在您保存更改后,源代码管理中的版本和本地版本之间有什么区别(如果有)? @ChrisF 不幸的是,没有使用源代码控制。 在这种情况下,在打开项目之前获取当前版本的副本。然后打开并保存。比较这两个版本。问题可能是设计人员正在格式化代码(或将空格换成制表符,反之亦然),并且复制/粘贴也应用了这些格式化规则 - 因此您没有发现任何更改。 这很可能是一个组件,它执行了一些触发它的初始化。许多复杂的组件库都有这些症状,我们在几个 DevExpress 控件中看到了这一点(尽管我无法准确指出它是哪一个),而且我也在其他库中看到了它。在发生这种情况的情况下,当我们保存文件并与版本控制进行比较时,没有区别。 查看新旧 Designer.cs 文件之间的差异是缩小范围的最明显方法。最常见的原因是表单的 AutoScaleMode,它在设计时也可以工作。该表格会自动适应显示器的 DPI 设置。但一切皆有可能,控件内的代码可以在设计时运行,并且可以更改强制重新生成 Designer.cs 文件的属性值。 【参考方案1】:

当您使用表单设计器时,它使用 CodDom 在 Designer.cs 文件中生成代码。一旦您打开设计器和 Designer.cs 文件。您在设计表单 UI CodeDome 时执行的操作将在设计器文件中生成代码并显示 * 符号。 为了使它在结尾处简短,有一个 Designer.cs 文件,它将实际反映表单设计器中的更改。

【讨论】:

以上是关于在 Visual Studio 的设计视图中打开表单 (.cs) 会立即显示未保存的更改的主要内容,如果未能解决你的问题,请参考以下文章

无法在设计器 Visual Studio 2015 中打开表单(使用 C#)

表单视图设计器无法在 Visual Studio 2019 中使用 c# .NET Core 3.1 [重复]

Visual Studio 2012 - 禁用单击设计视图

Visual Studio 在winForm设计视图中 怎样在窗体中能看到一格一格的虚线?

如何在 Visual Studio Xamarin.ios 设计器中添加同级视图?

混入 Visual Studio 2015 - 无设计视图