Sandro Bizioli


Chi sogna di giorno conosce molte cose che sfuggono a chi sogna soltanto di notte. (E.A.Poe)
Mappa

Forzare lo scroll senza l'utilizzo delle ScrollBar

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 = False
End Sub
Ovviamente 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.Top
End Sub

In 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.
Categoria: VB.Net
venerdì, 19 set 2008 Ore. 18.55
Statistiche
  • Views Home Page: 104.951
  • Views Posts: 522.331
  • Views Gallerie: 84.594
  • n° Posts: 227
  • n° Commenti: 222
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003