制作一组文本框不起作用

时间:2013-12-05 17:19:01

标签: c# windows-forms-designer

好的,这是我的designer.cs代码

for (int i = 0; i < textBoxes.Length; i++)
{
    textBoxes[i] = new System.Windows.Forms.TextBox();
    this.textBoxes[i].Location = new System.Drawing.Point(90, 50 + i * 20);
    this.textBoxes[i].Name = "textBox" + i;
    this.textBoxes[i].Size = new System.Drawing.Size(100, 20);
    this.textBoxes[i].TabIndex = i + 1;

    this.Controls.Add(textBoxes[i]);
}

这是Windows生成代码

下面的编辑代码
private System.Windows.Forms.TextBox[] textBoxes = new System.Windows.Forms.TextBox[5];

我删除了与我的任何文本框相关的任何代码。

相反,当我进入设计视图时,它会给我这个错误:

Games MoreGames.Designer.cs Line:32 Column:1 

screenshot of error

该程序可以运行,但为什么它不能让我访问设计师,所以我可以移动东西?

2 个答案:

答案 0 :(得分:1)

您无法编辑designer.cs文件。或者更确切地说,您可以编辑文件,但每次设计人员需要重新生成文件时,您所做的任何更改都将被覆盖,文件中的某些内容将阻止可视化设计器正确呈现您的表单。这是设计的。

您应该做的是将代码放在表单的构造函数中,紧跟调用InitializeComponent()方法之后。新的控件不会显示在屏幕上供您拖动,但是当您实际运行程序时它们会在那里。

此外,听起来你真正需要的是更多数据驱动的东西,比如FlowLayoutPanel,你可以在运行时添加和删除控件。

答案 1 :(得分:1)

正如Joel所说,您应该将该代码放在构造函数中,遵循MoreGames.cs文件中的InitializeComponent()方法(不能编辑的MoreGames.Designer.cs)但您可能还想添加以下内容:

textboxes[i].Parent = this;

这将告诉您的每个文本框表单是否是父文件。

表单的基本命名空间如下所示:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        private System.Windows.Forms.TextBox[] textBoxes = new System.Windows.Forms.TextBox[5];

        public Form1()
        {
            InitializeComponent();

            for (int i = 0; i < textBoxes.Length; i++)
            {
                textBoxes[i] = new System.Windows.Forms.TextBox();
                this.textBoxes[i].Location = new System.Drawing.Point(90, 50 + i * 20);
                this.textBoxes[i].Name = "textBox" + i;
                this.textBoxes[i].Size = new System.Drawing.Size(100, 20);
                this.textBoxes[i].TabIndex = i + 1;
                this.textBoxes[i].Parent = this;
                this.Controls.Add(textBoxes[i]);
            }
        }
    }
}