Cosi' funziona...
La pagina che contiene lo usercontrol :

codice:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebForm1"%>
<%@ Register TagPrefix="custom" TagName="prova" Src="WebUserControl1.ascx" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <body MS_POSITIONING="FlowLayout">

    <form id="Form1" method="post" runat="server">
     <custom:prova label="ciao" runat=server></custom:prova>
    </form>

  </body>
</html>
user control (ascx) :

codice:
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="WebUserControl1.ascx.vb" Inherits="WebUserControl1" %>
<asp:Label id="Label1" runat="server">Label</asp:Label>
user control (code-behind):
codice:
Public Class WebUserControl1
    Inherits System.Web.UI.UserControl

    Public label As String
    Protected WithEvents Label1 As System.Web.UI.WebControls.Label

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = label
    End Sub
End Class
se invece devi farlo tramite LoadControl, la procedura che ho sempre usato l'ho scritta qui http://forum.html.it/forum/showthrea...hreadid=945978
(devi fare un CTYPE per castare il tuo controllo "manovratore" verso la classe dello usercontrol originale)

le proprieta' poi devono essere pubbliche per essere viste dalla pagina che ospita il controllo. facci sapere del parto