- PR -

[ASP.NET : C#] コントロールの動的追加方法

投稿者投稿内容
未記入
会議室デビュー日: 2006/01/19
投稿数: 7
投稿日時: 2006-06-23 10:11
お世話になります。

現在[ASP.NET 2.0 C#]を使用してWeb画面の開発を行っております。

ボタンを押すたびに複数(数十個程度)のテキストボックスを作成したいのですが、そのようなことは可能でしょうか?

以下のページ参考にボタン押下時にテキストボックスを追加するということはできました。

[HOW TO]Visual C# .NET を使用して ASP.NET で動的にコントロールを作成する方法

そこで、追加するコントロールを配列で定義すればよいのかとも考え以下のコードを作成してみましたが、
「オブジェクト参照がオブジェクト インスタンスに設定されていません。 」
とのエラーメッセージが表示されうまくいきません。

コード:
	protected void addButton(object sender, EventArgs e){

		TextBox [] TextBoxes = new TextBox[3];
		TextBoxes[1].ID = "TextBox1";
		Form1.Controls.Add(TextBoxes[1]);

	}



しょうもない質問かもしれませんが、よろしくお願いいたします。

burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-06-23 10:22
配列を定義しただけではダメなので、インスタンスを生成してください。。。

TextBoxes[0] = new TextBox();


[ メッセージ編集済み 編集者: burton999 編集日時 2006-06-23 10:22 ]
深山
ベテラン
会議室デビュー日: 2006/05/09
投稿数: 66
お住まい・勤務地: 都内某所
投稿日時: 2006-06-23 10:22
引用:

未記入さんの書き込み (2006-06-23 10:11) より:

そこで、追加するコントロールを配列で定義すればよいのかとも考え以下のコードを作成してみましたが、
「オブジェクト参照がオブジェクト インスタンスに設定されていません。 」
とのエラーメッセージが表示されうまくいきません。

コード:
	protected void addButton(object sender, EventArgs e){

		TextBox [] TextBoxes = new TextBox[3];
		TextBoxes[1].ID = "TextBox1";
		Form1.Controls.Add(TextBoxes[1]);

	}



しょうもない質問かもしれませんが、よろしくお願いいたします。



エラーメッセージの指摘している通りだと思います。

コード:
	protected void addButton(object sender, EventArgs e){
		TextBox [] TextBoxes = new TextBox[3];
		TextBoxes[1] = new TextBox();     <== 追加
		TextBoxes[1].ID = "TextBox1";
		Form1.Controls.Add(TextBoxes[1]);
	}


でどうでしょう?
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-06-23 10:52
引用:

burton999さんの書き込み (2006-06-23 10:22) より:
配列を定義しただけではダメなので、インスタンスを生成してください。。。


配列に関しては定義だけでなくインスタンス化もしてるよね。

配列をインスタンス化するだけではダメなので、要素のインスタンスも生成してください。。。

が正しいよねw
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-06-23 11:50
引用:

配列に関しては定義だけでなくインスタンス化もしてるよね。
配列をインスタンス化するだけではダメなので、要素のインスタンスも生成してください。。。
が正しいよねw



おっしゃる通りです。。。
未記入
会議室デビュー日: 2006/01/19
投稿数: 7
投稿日時: 2006-06-23 14:05
てっきり、以下で配列が使用できる状態まで定義できているものと思っておりました。

TextBox [] TextBoxes = new TextBox[3];

さらに要素のインスタンスも生成しないといけないとは・・・。

どうもありがとうございましたm(_ _)m
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-23 14:54
引用:

未記入さんの書き込み (2006-06-23 14:05) より:

てっきり、以下で配列が使用できる状態まで定義できているものと思っておりました。
TextBox [] TextBoxes = new TextBox[3];
さらに要素のインスタンスも生成しないといけないとは・・・。


イメージしていたものは、以下に当たります。

コード:

    TextBox[] TextBoxes = new TextBox[3] {new TextBox(), new TextBox(), new TextBox()};

    TextBoxes[0].ID = "TextBox0";
    TextBoxes[1].ID = "TextBox2";
    TextBoxes[2].ID = "TextBox3";


1 つ 1 つの TextBox に意味がある場合は、配列にしない方が良いでしょう。

または、以下のように配列にしない方法を取ることができます。

コード:

    protected void addButton(object sender, EventArgs e) {
        {
            TextBox addTextBox = new TextBox();
            addTextBox.ID = "TextBox1";
            Form1.Controls.Add(addTextBox);
        }

        {
            TextBox addTextBox = new TextBox();
            addTextBox.ID = "TextBox2";
            Form1.Controls.Add(addTextBox);
        }

        {
            TextBox addTextBox = new TextBox();
            addTextBox.ID = "TextBox2";
            Form1.Controls.Add(addTextBox);
        }
    }


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
会議室デビュー日: 2006/01/19
投稿数: 7
投稿日時: 2006-06-23 16:19
もともと、行おうとしていた処理は、
「DBから値を取得し、その値の個数分テキストボックスを作成する。」
というものですので、それは以下のコードで実現できることを確認しました。

コード:
protected void addButton(object sender, EventArgs e){

	int i;
	int DataCount = データベース個数取得();
	TextBox [] TextBoxes = new TextBox[10];

	for (i=0 ; i<DataCount ; i++){
		TextBoxes[i] = new TextBox();
		TextBoxes[i].ID = "TextBox" + i.ToString();
		Form1.Controls.Add(TextBoxes[i]);
	}
}



じゃんぬねっと様が書かれている、

コード:
protected void addButton(object sender, EventArgs e) {
    {
        TextBox addTextBox = new TextBox();
        addTextBox.ID = "TextBox1";
        Form1.Controls.Add(addTextBox);
    }
     {
        TextBox addTextBox = new TextBox();
        addTextBox.ID = "TextBox2";
        Form1.Controls.Add(addTextBox);
    }
     {
        TextBox addTextBox = new TextBox();
        addTextBox.ID = "TextBox2";
        Form1.Controls.Add(addTextBox);
    }
}



では、作成されるコントロールの個数が固定されてしまう気がします。

根本的な質問なのですが、配列を使用せずに個数の変化するコントロールを動的に作成することは可能なのでしょうか?

スキルアップ/キャリアアップ(JOB@IT)