2

フォームに約 100 セットのコントロール (ラベル、チェックボックス、テキストボックス) のリストがあります。これらはすべてデフォルト名 (textbox1、textbox2、... textbox101) のラベルが付けられています。これらは通常、必要でない限り非表示になっています。私が実行すると:

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

最初の 90 個だけが Controls コレクションにあるように見えます (メッセージ ボックスの出力で証明されているように)。フォームの限界に達したかのようですが、そうではないことはわかっています。

これらはすべて .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# がフォーム上のコントロールに関する情報を保持する基本的な場所はありますか? ありがとう!

4

1 に答える 1

1

デザイナー ファイルをチェックし、それらが実際にフォームに追加されていることを確認します。つまり、行を探しますthis.Controls.Add(label91)

過去に何かを削除したために、孤立したコントロールがデザイナー ファイルに残ることがあります。コードを見ると、そこにコントロールがあるはずのように見えますが、それは未使用の (残りの) 変数にすぎません。

それを除いて、コントロールがコンテナー (Panelまたは などGroupBox) に含まれていないことを確認してください。それらは子の子になり、 に直接表示されませんForm.Controls

それ以外の場合、フォームの一部であるすべてのコントロールは になります。Form.Controlsこれ、子コントロールの基になる場所 (および唯一の場所) であるためです。

于 2013-03-02T15:41:28.663 に答える