我知道,.designer.cs
文件包含Visual Studio中可视窗体设计器生成的数据。但是,我还有一些额外的方法,我想将它们放入.designer.cs
文件中,因为它们负责较低级别的表单处理(例如,我的可视状态管理器)。
InitializeComponent
文件中的.designer.cs
方法有一条注释说明它是自动生成的,不应由用户修改。此限制是否仅适用于该方法,或者用户根本不应编辑.designer.cs
文件?我注意到,除其他外,它包含用户可能想要修改的Dispose()
方法 - 建议第一个选项。不过,我想确定一下。
答案 0 :(得分:9)
你永远不应该修改.designer.cs
。期。您的更改将被无限制地覆盖。
更新为了更有帮助,C#自v3(VS 2008)包含了部分方法,许多设计人员现在都会使用这些方法来实现自定义行为。
答案 1 :(得分:5)
此指令适用于完整的designer.cs文件。 因为所有编写的代码都是自动生成的。
您不应该对此文件进行任何修改,因为它可以随时重新创建...这将删除您的方法......
如果您想将代码与表单代码文件分开,那么我建议创建另一个包含部分类的文件,您可以在其中放置所有这些方法......
希望它有所帮助...
答案 2 :(得分:5)
我认为其他答案正在简化太多。
首先,我完全同意编辑.designer文件几乎总是一个坏主意,但有一些情况我已经这样做了,觉得它很好,也很合适,并没有被烧伤。
假设我创建了一个标签并意外双击。 Designer在我的主.cs文件中创建一个方法然后删除:
private void label1_Click(object sender, EventArgs e)
{
}
好吧,现在代码不会构建,除非我还从我的.designer文件中删除了以下内容:
this.label1.Click += new System.EventHandler(this.label1_Click);
不太常见,事物被添加到表单或面板(或菜单!)的顺序很重要,并且在代码中更改此顺序比在Designer GUI中更容易。根据我的经验,VS 2010总是对此有所了解,更新其GUI的信息,并重新绘制其预览。只记得关注Add()
方法 - 声明的顺序变量通常无关紧要。
同样,如果您设置的属性会导致将行添加到.designer文件中,则删除该行会快速获取并且Designer会刷新。也许使用GUI更改属性更明智/更安全,但我认为删除该行更清晰。
不在此区域内的代码#region Windows Form Designer generated code
只会生成一次。移动是安全的,正如其他人在其他地方推荐的那样(https://stackoverflow.com/a/6527072/1593924),如果您正在修改Dispose(bool)
或者添加Dispose()
,那么实际移动Dispose(bool)
方法会非常有意义。理想情况下应该位于protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
旁边的方法。
Dispose(bool)
免责声明:
答案 3 :(得分:1)
让peace.cs平静下来不仅可以防止您的更改被覆盖,而且还可以帮助其他开发人员说不会出现意外情况。话虽如此,我至少可以想到一个例外,那就是帖子作者提到的例外:Dispose()
方法的扩展。据我所知,这段代码 - 一旦生成 - 将不会被覆盖。
但是,在我看来,更好的解决方案是覆盖Dispose
方法而不是调用base.Dispose()
,这样我们就可以使designer.cs保持干净。
答案 4 :(得分:0)
部分设计器表单类,Visual Studio使用它来放置构建控件所需的所有代码。
方法InitializeComponent()不能覆盖:设计器编辑器使用它来渲染表单的预览! 尝试新项目:调整表单大小,添加标签和按钮,并重命名InitializeComponent()方法+重新编译。 您的表单恢复为默认大小!
如果需要通过表单加载来调用代码,只需重写OnLoad()虚方法,如果需要通过表单显示调用代码,则简单覆盖OnShown()虚方法。
请记住在覆盖开始时调用base.Method()。
希望这一点我的经验可以提供帮助!