VB.Net mette a disposizione una proprietà molto interessante disponibile nei vari controlli che fungono da contenitore come, ad esempio, i
Panel e le
GroupBox ed ovviamente il
Form stesso. Questa proprietà è l'
Autoscroll.
Cito da
MSDN "
Quando impostata a true, se uno o più dei controlli risulta all'esterno dell'area del contenitore dono sono inseriti, vengono visualizzate le classiche barre di scorrimento. Inoltre, quando lo scorrimento automatico è attivo, l'area client del form scorre automaticamente fino a rendere visibile il controllo con lo stato attivo per l'input."
Ok fin qui nulla di strano, molto interessante ed utile, ma supponiamo di non voler visualizzare le barre di scorrimento automatiche, o semplicemente di voler gestire lo scroll non attraverso il click sulle stesse ma direttamente da codice. Come facciamo?
Qui ci viene incontro la proprietà
.VerticalScroll dell'oggetto contenitore che ci permette di settare il valore desiderato.
Es.Panel1.VerticalScroll.Value = 100
Ottimo, ma come facciamo a sapere qual'è il valore corretto per visualizzare un determinato controllo non più nell'area visibile del nostro contenitore?
Un sistema efficace potrebbe essere quello di valorizzare la proprietà
AutoScroll in successione a
True e a
False, in questo modo:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Panel1.AutoScroll = True Panel1.AutoScroll = FalseEnd SubOvviamente il mio contenitore (panel) deve già contenere tutti i controlli.
Un altro metodo un po' rozzo, ma funzionale, è quello di impostare manualmente i valori
Maximum e
Minimum della proprietà VerticalStroll alla posizione iniziale dei controlli interessati.
Ad esempio, supponiamo di avere una serie di label contenute in un Panel e di voler visualizzarne al di fuori dell'area attualemnte visibile.
In fase di inizializzazione potrei settare le due proprietà come segue:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Panel1.VerticalScroll.Maximum = Label9.Top Panel1.VerticalScroll.Minimum = Label1.TopEnd SubIn ogni caso, una volta settate le proprietà .Minimum e .Maximum possiamo operare direttamente da codice come negli esempi qui riportati.
Per andare alla
fine dello scroll:
Panel1.VerticalScroll.Value = Panel1.VerticalScroll.Maximum
Per andare all'
inizio dello scroll:
Panel1.VerticalScroll.Value = Panel1.VerticalScroll.Minimum
Per "
avanzare" del valore di SmallChange...
Panel1.VerticalScroll.Value += Panel1.VerticalScroll.SmallChange
Per "
diminuire" del valore di SmallChange...
Panel1.VerticalScroll.Value += Panel1.VerticalScroll.SmallChange
Buon divertimento a tutti.