Help and Support

文書番号: 317515 - 最終更新日: 2005年9月21日 - リビジョン: 4.3

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

この記事は、以前は次の ID で公開されていました: JP317515

目次

すべて展開する | すべて折りたたむ

概要

この資料では、ASPX Web ページでコントロールを動的に作成する方法について説明します。

サンプル プロジェクトは次の操作を行います。
  • 2 つの TextBox コントロールを作成します。
  • TextBox の内容 (TextBox.text) と属性が、サーバーへのポスト時に保存されることを検証します。
  • 動的に作成されたコントロールによってポストされるイベントが処理される方法を示します。

プロジェクトと静的コントロールを作成する

  1. Visual Studio .NET で、Visual Basic .NET を使用して新しい Web プロジェクトを作成します。作成したプロジェクトに DynamicCreate という名前を付けます。
  2. WebForm1.aspx ファイルを開き、HTML ビューに切り替えます。<HTML> タグと </HTML> タグの間に以下のコードを挿入します。
    			<HEAD>
    			<title>WebForm1</title>
    			<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0">
    			<meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    			<meta name="vs_defaultClientScript" content="JavaScript">
    			<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    			</HEAD>
    			<body MS_POSITIONING="GridLayout">
    			<form id="Form1" method="post" runat="server">
    			<asp:Button id="Button1" style="Z-INDEX: 100; LEFT: 23px; POSITION: absolute; TOP: 108px" runat="server" Text="Submit" Height="27px" Width="100px"></asp:Button>
    			<asp:Label id="Label4" style="Z-INDEX: 105; LEFT: 23px; POSITION: absolute; TOP: 197px" runat="server" Width="368px" EnableViewState="False"></asp:Label>
    			<asp:Label id="Label3" style="Z-INDEX: 104; LEFT: 23px; POSITION: absolute; TOP: 163px" runat="server" Width="368px" EnableViewState="False"></asp:Label>
    			<asp:Label id="Label2" style="Z-INDEX: 102; LEFT: 23px; POSITION: absolute; TOP: 60px" runat="server" Width="86px" Height="19px"> TextBox2:</asp:Label>
    			<asp:Label id="Label1" style="Z-INDEX: 101; LEFT: 23px; POSITION: absolute; TOP: 28px" runat="server" Width="86" Height="19"> TextBox1:</asp:Label></form>
    			</body>
    			
  3. デザイン ビューに切り替えて、プロジェクトで使用される静的に作成されたコントロールを表示します。

動的にコントロールを作成して接続する

  1. ソリューション エクスプローラで [すべてのファイルを表示] をクリックして、WebForm1.aspx に関連するファイルの一覧を表示します。WebForm1.aspx.vb を開きます。
  2. .vb (コード ビハインド) ファイルで TestBox コントロールを宣言し、.aspx ファイルの既存のフォーム要素の変数も宣言します。WebForm1 パブリック クラス宣言より後の宣言を次のように更新します。
    Public Class WebForm1
        Inherits System.Web.UI.Page
        Protected WithEvents Button1 As System.Web.UI.WebControls.Button
        Protected WithEvents Label4 As System.Web.UI.WebControls.Label
        Protected WithEvents Label3 As System.Web.UI.WebControls.Label
        Protected WithEvents Label2 As System.Web.UI.WebControls.Label
        Protected WithEvents Label1 As System.Web.UI.WebControls.Label
    
        ' Added by hand for access to the form.
        Protected Form1 As System.Web.UI.HtmlControls.HtmlForm
    
        ' Added by hand; will create instance in OnInit.
        Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
        Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox
    						
    ツールボックスの TextBox を ASPX ページにドラッグする場合のように、TextBox 宣言は手作業で入力します。ただし、この場合はコントロールが動的に作成されます。
  3. TextBox コントロールを動的に作成するためのコードを追加します。コントロールは、ページが実行されるたびに作成されます。コントロールの動的作成は、WebForm1 クラスによって提供される Page_Init 関数内で行うのが最良です。Page_Init 関数を見つけます。"Web フォーム デザイナで作成されたコード" というコメントが付いたコードを展開し、Page_Init 関数を、以下のように変更します。
    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        ' Create dynamic controls here.
        TextBox1 = New TextBox()
        TextBox1.ID = "TextBox1"
        TextBox1.Style("Position") = "Absolute"
        TextBox1.Style("Top") = "25px"
        TextBox1.Style("Left") = "100px"
        Form1.Controls.Add(TextBox1)
    
        TextBox2 = New TextBox()
        TextBox2.ID = "TextBox2"
        TextBox2.Style("Position") = "Absolute"
        TextBox2.Style("Top") = "60px"
        TextBox2.Style("Left") = "100px"
        Form1.Controls.Add(TextBox2)
    
        ' CODEGEN: The Web Form Designer requires this method call.
        ' Do not modify it by using the code editor.
        InitializeComponent()
    End Sub
    						
    このコードは、2 つの TextBox コントロールを動的に作成し、作成したコントロールの ID と位置を設定して、次にそれらのコントロールを Form Controls コレクションにバインドします。ASPX ページに Web フォームの Panel コントロールを追加して、Page_Init 関数でテキスト ボックスをコントロールにバインドします。この例を以下に示します。
        TextBox1 = New TextBox()
        TextBox1.ID = "TextBox1"
    ' comment   add command  the Form Controls collection as follows
    '   Form1.Controls.Add(TextBox1)'
        Panel1.Controls.Add(TextBox1)
    					
    : Web フォームでコントロールを動的に作成する場合、コントロールを作成して、Page_Init イベント ハンドラまたは Page_Load イベント ハンドラで、作成したコントロールをコントロール コレクションに追加する必要があります。これを行わないと、コントロールが予期したように動作しない場合があります。
  4. テキスト ボックスの Text プロパティを初期化します。既存の Page_Load 関数を次のように変更します。
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not IsPostBack Then
            ' Set the initial properties for the text boxes.
            TextBox1.Text = "TextBox1"
            TextBox2.Text = "TextBox2"
        End If
    End Sub
    						
    テキスト ボックスの初期値 (If Not IsPostBack) を設定する必要があるのは 1 回だけです。その後は、テキスト ボックスの IPostBackDataHandler インターフェイスによってこの情報が保持されるため、以降のポストで値を再設定する必要はありません。
  5. TextBox の TextChanged イベントのハンドラを追加します。Page_Load 関数後に次のコードを追加します。
    Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged
        Dim txtBoxSender As TextBox
        Dim strTextBoxID As String
    
        txtBoxSender = CType(sender, TextBox)
        strTextBoxID = txtBoxSender.ID
    
        Select Case strTextBoxID
            Case "TextBox1"
                Label3.Text = "TextBox1 text was changed"
    
            Case "TextBox2"
                Label4.Text = "TextBox2 text was changed"
        End Select
    End Sub
    						
    このコードは、イベントを発生させたコントロールを特定し、適切な Label コントロールを使用してユーザーにそれを報告します。この関数は、動的に作成された両方の TextBox コントロールの TextChanged イベントを処理します。デフォルトでは、TextBox コントロールの AutoPostBack は false です。そのため、コントロールのテキストが変更されてもサーバーへのポストバックは発生しません。ただし、[Submit] をクリックしてフォームがサーバーにポストされた場合、TextBox コントロールの TextChanged イベントが発生し、この関数が呼び出されます。

サンプルを保存、ビルド、および実行する

サンプルを保存してビルドします。Visual Studio .NET でサンプルを実行するには、ASPX ファイルを右クリックし、ショートカット メニューの [ブラウザで表示] をクリックします。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 317515? (http://support.microsoft.com/kb/317515/EN-US/ ) (最終更新日 2004-02-11) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
キーワード:?
kbctrlcreate kbevent kbhowtomaster kbservercontrols kbwebforms KB317515
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

サポート技術情報の翻訳