Originariamente inviato da eternauta 
alla fine ho risolto cosi (vedi codice).. ma ho alcune domande. 
- quando ci si riferisce a usercontrol, si parla di un controllo creato da codice (come in questo caso time_base che è dichiarato prima con dim time_base as new panel), o è un controllo costruito  ad hoc partendo dai controlli base? 
			
		
 
	 
 
Per usercontrol intendevo proprio... usercontrol 
Lo puoi aggiungere al progetto col menu Project/Add User Control.
Una volta compilato il progetto ti ritroverai una nuova icona nella toolbox che ti permetterà di inserire il tuo nuovo controllo nel form, allo stesso modo con il quale inserisci tutti gli altri controlli predefiniti di VB.
Come ti ho già accennato nel messaggio precedente, io sposterei tutta la complessità del disegno della griglia e dei box all'interno dello usercontrol. Eviterei di usare, all'interno dello usercontrol, ulteriori componenti (Label ecc.) ma lascerei fare tutto all'evento Paint usando le primitive messe a disposizione dall'oggetto Graphics (linee, sfondi, testi, ecc.). Devi ovviamente progettare una serie di proprietà con le quali il form che ospita il tuo usercontrol possa interagire con esso. Ecco un abbozzo di usercontrol:
	codice:
	Public Class GrigliaProgrammi
    Private _canali As Canali
    Public ReadOnly Property Canali() As Canali
        Get
            Return _canali
        End Get
    End Property
    Public Sub New()
        ' This call is required by the designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.
        _canali = New Canali
    End Sub
    Private Sub GrigliaProgrammi_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        'disegna la timeline
        '...
        'disegna le righe dei canali
        If _canali.Count > 0 Then
            For Each c As Canale In _canali
                'disegna box con il nome del canale
                '...
                'disegna i box dei vari programmi
                For Each ev As Evento In c.Eventi
                    '...
                Next
            Next
        End If
    End Sub
End Class
Public Class Canale
    Private _eventi As Eventi
    Public Property ID As Integer
    Public Property Descrizione As String
    Public ReadOnly Property Eventi As Eventi
        Get
            Return _eventi
        End Get
    End Property
    Public Sub New()
        _eventi = New Eventi
    End Sub
End Class
Public Class Canali
    Inherits List(Of Canale)
End Class
Public Class Evento
    Public Property Titolo As String
    Public Property Inizio As Date
    Public Property Fine As Date
    Public Sub New()
        '
    End Sub
    Public Sub New(titolo As String, inizio As Date, fine As Date)
        Me.Titolo = titolo
        Me.Inizio = inizio
        Me.Fine = fine
    End Sub
End Class
Public Class Eventi
    Inherits List(Of Evento)
End Class
 
Nel tuo form sarà necessario definire alcune proprietà, esempio:
	codice:
	Dim c As Canale
Dim ev As Evento
c = New Canale
c.ID = 1
c.Descrizione = "TeleDico"
ev = New Evento("TG24", New Date(2011, 6, 29, 10, 0, 0), New Date(2011, 6, 29, 10, 15, 0))
c.Eventi.Add(ev)
ev = New Evento("Oroscopo", New Date(2011, 6, 29, 10, 12, 0), New Date(2011, 6, 29, 10, 18, 0))
c.Eventi.Add(ev)
GrigliaProgrammi1.Canali.Add(c)