我的表单上的一些控件没有出现在foreach循环中

时间:2013-03-02 15:38:35

标签: c# winforms controls windows-forms-designer

我在表单上有一组约100套控件(标签,复选框,文本框)。它们都标有默认名称,(textbox1,textbox2,... textbox101)除非需要,否则它们通常是隐藏的。 我跑的时候:

        string msg = "";
        foreach (Control child in Controls)
            msg = msg + child.Name + ", ";
        MessageBox.Show(msg);

只有前90个出现在Controls集合中(如Messagebox输出中所示)。就好像我在表格上达到了极限,但我知道我没有。

它们都是在.Designer.cs文件中创建的,它们看起来都一样。它们的创建方式相同。

    ...
    private System.Windows.Forms.CheckBox checkBox88;
    private System.Windows.Forms.Label label88;
    private System.Windows.Forms.TextBox textBox88;
    private System.Windows.Forms.CheckBox checkBox89;
    private System.Windows.Forms.Label label89;
    private System.Windows.Forms.TextBox textBox89;
    private System.Windows.Forms.CheckBox checkBox90;
    private System.Windows.Forms.Label label90;
    private System.Windows.Forms.TextBox textBox90;
    private System.Windows.Forms.CheckBox checkBox91;
    private System.Windows.Forms.Label label91;
    private System.Windows.Forms.TextBox textBox91;
    private System.Windows.Forms.CheckBox checkBox92;
    private System.Windows.Forms.Label label92;
    private System.Windows.Forms.TextBox textBox92;
    private System.Windows.Forms.CheckBox checkBox93;
    private System.Windows.Forms.Label label93;
    private System.Windows.Forms.TextBox textBox93;
    ...

是否有一些基础位置C#保存有关表单控件的信息? 谢谢!

1 个答案:

答案 0 :(得分:1)

检查设计器文件并确保它们实际上已添加到表单中。也就是说,寻找this.Controls.Add(label91)行。

有时设计器文件最终会出现孤立控件,可能您过去曾删除过某些内容。乍一看代码中看起来应该有一个控件,但它只是一个未使用的(剩余的)变量。

除此之外,请确保控件不在容器中(例如PanelGroupBox)。他们将是孩子的孩子,而不是直接出现在Form.Controls

否则,属于格式的所有控件都将在Form.Controls中,因为此 是子控件的基础位置(并且只是位置)