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)