无论如何,如果我在C#中通过表单设计器编辑表单,是否禁止删除我在Form1.Designer.cs中所做的更改?

无论如何,如果我在C#中通过表单设计器编辑表单,是否禁止删除我在Form1.Designer.cs中所做的更改?,c#,visual-studio-2010,express,windows-forms-designer,C#,Visual Studio 2010,Express,Windows Forms Designer,这是一个令人悲伤的问题…… 我在其中添加了许多支票,如: System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Profiles"); 替换为: #if DEMO System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Lines"); #else System.Windows.Form

这是一个令人悲伤的问题……
我在其中添加了许多支票,如:

System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Profiles");
替换为:

#if DEMO
   System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Lines");
#else
   System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Profiles");
#endif
但一旦我将事件处理程序添加到其中一个表单事件中,我的所有检查都将消失--
我可以做些什么来保留这些,但可以通过designer更改形式?


我使用的是VC#Express 2010

文件
.designer.cs
的要点是,每次更改设计器时都会重新生成该文件

如您所见,不应编辑生成的文件,因为它们会重新生成,并且您所做的任何更改都将丢失


在类构造函数中进行这些更改。

否,设计文件是针对VS设计器的,将随意重新生成

您可以通过向类构造函数添加代码来实现所需的功能:

    public Form1()
    {
        InitializeComponent();
        #if DEMO
           var changeNodes = treeView1.Nodes.Find("Profiles", true);
           if (changeNodes.Length>0)
           {
               foreach(TreeNode node in changeNodes)
               {
                    node.Name = "Lines";
                    node.Text = "Lines text";
                    // add/set whatever else you need in demo mode
               }
           }
           // or remove all nodes and add new ones
        #endif 
    }

您正在设计器中修改代码。为了能够生成预览,禁止在自动生成的部分中编写圈复杂度高于1的任何代码。这意味着没有if、循环或方法调用

相反,您应该在InitializeComponents()之后的其他地方进行这些更改! 在用控制元素填充数组时(为了以后更容易访问它们),我通常使用单独的方法InitializeDynamic()


注意:您可以在designer部分中更改代码,仅更改可以直接在设计中修改的代码(因此您可以在designer本身中进行修改)。

err,treeNode1在表单构造函数中是不可见的