Share via


How to: Scroll Form Contents

With a Panel control, you can set its AutoScroll property to true and vertically scroll through its contents. However, to scroll both vertically and horizontally you need to add scroll bars to define their properties.

Example

This example shows how to use horizontal and vertical scroll bar controls to scroll across and down an image on a form. When you click the scroll bars, the Left and Left properties of the panel change according to scroll bar values, thereby creating the scrolling experience.

This example creates a large image in the form, or a Rectangle with an X diagonally connecting the four corners.

The event-handling code for the ValueChanged event changes the Left or Left properties of the Panel by the changed value of the scroll bar. These properties decrease when you scroll right with the horizontal scroll bar and down with the vertical scroll bar. Conversely, they increase when you go in the opposite directions.

Imports System
Imports System.Drawing
Imports System.Windows.Forms

Public Class Scrolling
   Inherits System.Windows.Forms.Form
   Private WithEvents HScrollBar1 As System.Windows.Forms.HScrollBar
   Private WithEvents VScrollBar1 As System.Windows.Forms.VScrollBar
   Private Panel1 As System.Windows.Forms.Panel
   Private Label1 As System.Windows.Forms.Label
   Private Label2 As System.Windows.Forms.Label
   Private Label3 As System.Windows.Forms.Label
   Private Label4 As System.Windows.Forms.Label
   Private PictureBox1 As System.Windows.Forms.PictureBox
   Private MainMenu1 As System.Windows.Forms.MainMenu


   Public Sub New()

      InitializeComponent()

      Dim bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height)
      Dim blackpen As New Pen(Color.Black)
      Dim g As Graphics = Graphics.FromImage(bmp)
      g.FillRectangle(New SolidBrush(Color.Gainsboro), 0, 0, bmp.Width, bmp.Height)
      g.DrawLine(blackpen, 0, 0, bmp.Width, bmp.Height)
      g.DrawLine(blackpen, 0, bmp.Height, bmp.Width, 0)
      g.Dispose()

      Me.PictureBox1.Image = bmp
      Me.PictureBox1.Size = bmp.Size
      Me.VScrollBar1.Maximum = bmp.Height + Me.ClientSize.Height
      Me.HScrollBar1.Maximum = bmp.Width + Me.ClientSize.Width
      Me.HScrollBar1.Value = 0

      Me.Text = "x = 0, y = 0" 
    End Sub 

    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        MyBase.Dispose(disposing)
    End Sub 

    Private Sub InitializeComponent()
        Me.MainMenu1 = New System.Windows.Forms.MainMenu
        Me.HScrollBar1 = New System.Windows.Forms.HScrollBar
        Me.VScrollBar1 = New System.Windows.Forms.VScrollBar
        Me.Panel1 = New System.Windows.Forms.Panel
        Me.PictureBox1 = New System.Windows.Forms.PictureBox
        Me.Label1 = New System.Windows.Forms.Label
        Me.Label2 = New System.Windows.Forms.Label
        Me.Label3 = New System.Windows.Forms.Label
        Me.Label4 = New System.Windows.Forms.Label
        '  
        ' HScrollBar1 
        '  
        Me.HScrollBar1.LargeChange = 240
        Me.HScrollBar1.Location = New System.Drawing.Point(0, 255)
        Me.HScrollBar1.Maximum = 493
        Me.HScrollBar1.Size = New System.Drawing.Size(227, 13)
        '  
        ' VScrollBar1 
        '  
        Me.VScrollBar1.LargeChange = 268
        Me.VScrollBar1.Location = New System.Drawing.Point(227, 0)
        Me.VScrollBar1.Maximum = 549
        Me.VScrollBar1.Size = New System.Drawing.Size(13, 255)
        '  
        ' Panel1 
        '  
        Me.Panel1.Controls.Add(Me.PictureBox1)
        Me.Panel1.Controls.Add(Me.Label1)
        Me.Panel1.Controls.Add(Me.Label2)
        Me.Panel1.Controls.Add(Me.Label3)
        Me.Panel1.Controls.Add(Me.Label4)
        Me.Panel1.Size = New System.Drawing.Size(480, 536)
        '  
        ' PictureBox1 
        '  
        Me.PictureBox1.Location = New System.Drawing.Point(88, 36)
        Me.PictureBox1.Size = New System.Drawing.Size(304, 464)
        '  
        ' Label1 
        '  
        Me.Label1.Location = New System.Drawing.Point(8, 8)
        Me.Label1.Size = New System.Drawing.Size(82, 20)
        Me.Label1.Text = "Top Left" 
        '  
        ' Label2 
        '  
        Me.Label2.Location = New System.Drawing.Point(400, 8)
        Me.Label2.Size = New System.Drawing.Size(82, 20)
        Me.Label2.Text = "Top Right" 
        '  
        ' Label3 
        '  
        Me.Label3.Location = New System.Drawing.Point(8, 508)
        Me.Label3.Size = New System.Drawing.Size(82, 20)
        Me.Label3.Text = "Bottom Left" 
        '  
        ' Label4 
        '  
        Me.Label4.Location = New System.Drawing.Point(400, 508)
        Me.Label4.Size = New System.Drawing.Size(82, 20)
        Me.Label4.Text = "Bottom Right" 
        '  
        ' Scrolling 
        '  
        Me.Controls.Add(VScrollBar1)
        Me.Controls.Add(HScrollBar1)
        Me.Controls.Add(Panel1)
        Me.Menu = Me.MainMenu1
        Me.Text = "Scrolling" 
    End Sub  


    Shared Sub Main()
        Application.Run(New Scrolling)
    End Sub 


    Private Sub HScrollBar1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles HScrollBar1.ValueChanged
        Me.Panel1.Left = -Me.HScrollBar1.Value

        ' Display the current values in the title bar. 
        Me.Text = "x = " + Me.Panel1.Location.X.ToString + ", y = " + Me.Panel1.Location.Y.ToString
    End Sub 


    Private Sub VScrollBar1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles VScrollBar1.ValueChanged
        Me.Panel1.Top = -Me.VScrollBar1.Value

        ' Display the current values in the title bar.           
        Me.Text = "x = " + Me.Panel1.Location.X.ToString + ", y = " + Me.Panel1.Location.Y.ToString
    End Sub 
End Class
using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using System.Reflection;

namespace Scrolling
{

    public class Scrolling : System.Windows.Forms.Form
    {
        private System.Windows.Forms.HScrollBar hScrollBar1;
        private System.Windows.Forms.VScrollBar vScrollBar1;
        private System.Windows.Forms.Panel panel1;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.PictureBox pictureBox1;
        private System.Windows.Forms.MainMenu mainMenu1;

        public Scrolling()
        {

            InitializeComponent();

            Bitmap bmp = new Bitmap(pictureBox1.Width,pictureBox1.Height);
            Pen blackpen = new Pen(Color.Black);
            Graphics g = Graphics.FromImage(bmp);
            g.FillRectangle(new SolidBrush(Color.Gainsboro),0,0,bmp.Width,bmp.Height);
            g.DrawLine(blackpen,0,0, bmp.Width, bmp.Height);
            g.DrawLine(blackpen,0,bmp.Height,bmp.Width,0);
            g.Dispose();

            this.pictureBox1.Image = bmp;
            this.pictureBox1.Size = bmp.Size;
            this.vScrollBar1.Maximum = bmp.Height + this.ClientSize.Height;
            this.hScrollBar1.Maximum = bmp.Width + this.ClientSize.Width;
            this.hScrollBar1.Value = 0;

            this.Text = "x = 0, y = 0";
        }

        protected override void Dispose( bool disposing )
        {
            base.Dispose( disposing );
        }

        private void InitializeComponent()
        {
            this.mainMenu1 = new System.Windows.Forms.MainMenu();
            this.hScrollBar1 = new System.Windows.Forms.HScrollBar();
            this.vScrollBar1 = new System.Windows.Forms.VScrollBar();
            this.panel1 = new System.Windows.Forms.Panel();
            this.pictureBox1 = new System.Windows.Forms.PictureBox();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.label4 = new System.Windows.Forms.Label();
            // 
            // hScrollBar1 
            // 
            this.hScrollBar1.LargeChange = 240;
            this.hScrollBar1.Location = new System.Drawing.Point(0, 255);
            this.hScrollBar1.Maximum = 493;
            this.hScrollBar1.Size = new System.Drawing.Size(227, 13);
            this.hScrollBar1.ValueChanged += new System.EventHandler(this.hScrollBar1_ValueChanged);
            // 
            // vScrollBar1 
            // 
            this.vScrollBar1.LargeChange = 268;
            this.vScrollBar1.Location = new System.Drawing.Point(227, 0);
            this.vScrollBar1.Maximum = 549;
            this.vScrollBar1.Size = new System.Drawing.Size(13, 255);
            this.vScrollBar1.ValueChanged += new System.EventHandler(this.vScrollBar1_ValueChanged);
            // 
            // panel1 
            // 
            this.panel1.Controls.Add(this.pictureBox1);
            this.panel1.Controls.Add(this.label1);
            this.panel1.Controls.Add(this.label2);
            this.panel1.Controls.Add(this.label3);
            this.panel1.Controls.Add(this.label4);
            this.panel1.Size = new System.Drawing.Size(480, 536);
            // 
            // pictureBox1 
            // 
            this.pictureBox1.Location = new System.Drawing.Point(88, 36);
            this.pictureBox1.Size = new System.Drawing.Size(304, 464);
            // 
            // label1 
            // 
            this.label1.Location = new System.Drawing.Point(8, 8);
            this.label1.Size = new System.Drawing.Size(82, 20);
            this.label1.Text = "Top Left";
            // 
            // label2 
            // 
            this.label2.Location = new System.Drawing.Point(400, 8);
            this.label2.Size = new System.Drawing.Size(82, 20);
            this.label2.Text = "Top Right";
            // 
            // label3 
            // 
            this.label3.Location = new System.Drawing.Point(8, 508);
            this.label3.Size = new System.Drawing.Size(82, 20);
            this.label3.Text = "Bottom Left";
            // 
            // label4 
            // 
            this.label4.Location = new System.Drawing.Point(400, 508);
            this.label4.Size = new System.Drawing.Size(82, 20);
            this.label4.Text = "Bottom Right";
            // 
            // Scrolling 
            // 
            this.Controls.Add(this.vScrollBar1);
            this.Controls.Add(this.hScrollBar1);
            this.Controls.Add(this.panel1);
            this.Menu = this.mainMenu1;
            this.Text = "Scrolling";

        }

        static void Main()
        {
            Application.Run(new Scrolling());
        }

        private void hScrollBar1_ValueChanged(object sender, System.EventArgs e)
        {
            this.panel1.Left = -this.hScrollBar1.Value;

            // Display the current values in the title bar. 
            this.Text = "x = " + this.panel1.Location.X + ", y = " + this.panel1.Location.Y;
        }

        private void vScrollBar1_ValueChanged(object sender, System.EventArgs e)
        {
            this.panel1.Top = -this.vScrollBar1.Value;

            // Display the current values in the title bar. 
            this.Text = "x = " + this.panel1.Location.X + ", y = " + this.panel1.Location.Y;
        }
    }
}

Compiling the Code

This example requires references to the following namespaces:

See Also

Tasks

How to: Handle Orientation and Resolution Changes

Other Resources

Windows Forms Controls in the .NET Compact Framework