It's really easier than you'd think, check it out:
StupidControl1.ascx
VB Code:
  1. <%@ Control Language="vb" AutoEventWireup="false"
  2.     Codebehind="StupidControl1.ascx.vb"
  3.     Inherits="DeathAngelVB.StupidControl1" %>
  4. <asp:TextBox ID="txtName" Runat="server"/>
  5. <asp:Button ID="btnSubmit" Runat="server"
  6.     Text="Submit" OnClick="btnSubmit_Click" />
StupidControl1.ascx.vb
VB Code:
  1. Public Class StupidControl1 : Inherits System.Web.UI.UserControl
  2.     Protected txtName As System.Web.UI.WebControls.TextBox
  3.     Protected btnSubmit As System.Web.UI.WebControls.Button
  4.     Public Event SubmitButtonClick As System.EventHandler
  5.     Public Property Name() As String
  6.         Get
  7.             Return txtName.Text
  8.         End Get
  9.         Set(ByVal Value As String)
  10.             txtName.Text = Value
  11.         End Set
  12.     End Property
  13.     Public Sub OnSubmitButtonClick(ByVal e As System.EventArgs)
  14.         RaiseEvent SubmitButtonClick(Me, e)
  15.     End Sub
  16.     Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs)
  17.         OnSubmitButtonClick(New System.EventArgs)
  18.     End Sub
  19. End Class
StupidControl2.ascx
VB Code:
  1. <%@ Control Language="vb" AutoEventWireup="false"
  2.     Codebehind="StupidControl2.ascx.vb"
  3.     Inherits="DeathAngelVB.StupidControl2" %>
  4. <br/>
  5. You Entered:<asp:Label ID="lblName" Runat="server"/>
StupidControl2.ascx.vb
VB Code:
  1. Public Class StupidControl2 : Inherits System.Web.UI.UserControl
  2.     Protected lblName As System.Web.UI.WebControls.Label
  3.     Public Property Name() As String
  4.         Get
  5.             Return lblName.Text
  6.         End Get
  7.         Set(ByVal Value As String)
  8.             lblName.Text = Value
  9.         End Set
  10.     End Property
  11. End Class
StupidControlTest.aspx
VB Code:
  1. <%@ Page Language="vb" AutoEventWireup="false"
  2.     Codebehind="StupidControlTest.aspx.vb"
  3.     Inherits="DeathAngelVB.StupidControlTest"%>
  4. <%@ Register TagPrefix="stupid" TagName="Control1" Src="StupidControl1.ascx" %>
  5. <%@ Register TagPrefix="stupid" TagName="Control2" Src="StupidControl2.ascx" %>
  6. <html>
  7.     <head>
  8.         <title></title>
  9.     </head>
  10.     <body>
  11.         <form runat="server">
  12.             <stupid:Control1 ID="MyStupidControl1" Runat="server"
  13.                 OnSubmitButtonClick="MyStupidControl1_SubmitButtonClick" />
  14.             <stupid:Control2 ID="MyStupidControl2" Runat="server" />
  15.         </form>
  16.     </body>
  17. </html>
StupidControlTest.aspx.vb
VB Code:
  1. Public Class StupidControlTest : Inherits System.Web.UI.Page
  2.     Protected MyStupidControl1 As DeathAngelVB.StupidControl1
  3.     Protected MyStupidControl2 As DeathAngelVB.StupidControl2
  4.     Protected Sub MyStupidControl1_SubmitButtonClick(ByVal sender As Object, ByVal e As System.EventArgs)
  5.         MyStupidControl2.Name = MyStupidControl1.Name
  6.     End Sub
  7. End Class