dentro il form, dove vuoi metti un contenitore, per esempio un
<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder>

il codice sottostante è:

codice:
Option Strict On
Partial Class CorsoApogeo_AggiuntaDinamicaControlli
    Inherits System.Web.UI.Page
    Private Function GetForm() As HtmlForm
        Return CType(Me.FindControl("Form1"), HtmlForm)
    End Function

    Private Function GetLabel() As Label
        Return CType(Me.FindControl("lbl1"), Label)
    End Function

    Private Function GetTextBox() As TextBox
        Return CType(Me.FindControl("tb1"), TextBox)
    End Function

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PrintLn("Page_Load")
        Dim tb As New TextBox()
        tb.ID = "tb1"
        tb.Text = "Scrivi qualcosa"
        Me.PlaceHolder1.Controls.Add(tb)

        Me.PlaceHolder1.Controls.Add(New LiteralControl("
"))

        Dim btn As New Button()
        btn.Text = "Spedisci"
        Me.PlaceHolder1.Controls.Add(btn)
        AddHandler btn.Click, AddressOf btn1_click


        Me.PlaceHolder1.Controls.Add(New LiteralControl("
"))

        Dim lbl As New Label()
        lbl.ID = "lbl1"
        Me.PlaceHolder1.Controls.Add(lbl)

    End Sub
    Private Sub btn1_click(ByVal Sender As Object, ByVal e As System.EventArgs)
        PrintLn("btn1_click")
        GetLabel().Text = "Mi hai chiamato, finalmente!
Mi hai spedito: " & Me.GetTextBox().Text
    End Sub
End Class

messo nell'evento load




ps: è un esempio molto datato, ma funziona. PrintLn è una procedura che fa Response.Write(xxxx & "
")


l'istruzione che ti interessa è:

AddHandler btn.Click, AddressOf btn1_click