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

时间:2012-10-04 12:06:20

标签: 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.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Profiles");
#endif

但是,一旦我将事件处理程序添加到其中一个表单事件中,我的所有检查都会消失-_-
我能做些什么来保持那些但能够通过设计师改变形式?

我使用VC#Express 2010

3 个答案:

答案 0 :(得分:4)

.designer.cs文件的重点是,每次重新设置时,都会重新设置设计器。

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

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

答案 1 :(得分:2)

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

相反,你应该在InitializeComponents()之后的其他地方进行这些更改! 在使用控件元素填充数组时(为了以后可以方便地访问它们),我通常会创建一个单独的方法InitializeDynamic()。

注意:您可以更改设计器部分中的代码,只能更改设计中可以直接调整的代码(因此您可以在设计器中完成)。

答案 2 :(得分:1)

不,Designer文件适用于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 
    }