3

这是一个可悲的问题......
我在那里添加了很多检查,例如:

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

4

3 回答 3

4

.designer.cs文件的重点是每次您进行设计器更改时都会重新生成它。

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

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

于 2012-10-04T12:11:09.337 回答
2

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

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

注意:您可以在设计器部分更改代码,只有那些可以直接在设计中修改的代码(因此您可以在设计器本身中完成)。

于 2012-10-04T12:16:05.510 回答
1

不,Desinger 文件是为 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 
    }
于 2012-10-04T12:12:57.020 回答