ScrollBar Class

Implements the basic functionality of a scroll bar control.

Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

'Declaration
<ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)> _
<ComVisibleAttribute(True)> _
Public MustInherit Class ScrollBar
	Inherits Control
'Usage
Dim instance As ScrollBar

/** @attribute ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) */ 
/** @attribute ComVisibleAttribute(true) */ 
public abstract class ScrollBar extends Control
ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) 
ComVisibleAttribute(true) 
public abstract class ScrollBar extends Control

You typically do not inherit directly from the ScrollBar class. To create your own scroll bar class, inherit from the VScrollBar or HScrollBar class.

To adjust the value range of the scroll bar control, set the Minimum and Maximum properties. To adjust the distance the scroll box moves, set the SmallChange and LargeChange properties. To adjust the starting point of the scroll box, set the Value property when the control is initially displayed.

NoteNote

The scroll box is sometimes referred to as the scroll thumb.

The following code example adds horizontal and vertical scroll bars to a PictureBox control, and loads an Image into the picture box on the DoubleClick event of the control. You can double-click the picture box and load a new image at any time. If the image is larger than the control, the scroll bars will be displayed so you can scroll to view the remainder of the image. The example assumes that a PictureBox, with a VScrollBar and HScrollBar docked to two of its edges, has been created on a Form. It also assumes a reference to the System.Drawing namespace has been added. Make sure the HandleScroll method is set as the Scroll event handler delegate for both the VScrollBar and HScrollBar. For additional code that can extend this example, see the LargeChange, SmallChange, Maximum, Minimum, or Value members. You might consider setting the properties of your scroll bar based on the properties of its parent control. For example, you can add a method to the example that sets the Maximum value equal to the Height or Width of the Image assigned to the PictureBox. Set the LargeChange value equal to the height or width of the PictureBox (with the height or width of the scroll bar subtracted). This prevents the user from scrolling past the edge of the image, and the LargeChange value will only move the image's viewable area the same distance as the area displayed in the picture box.

Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms

Namespace Scrollbar
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Private WithEvents openFileDialog1 As System.Windows.Forms.OpenFileDialog
        Private WithEvents pictureBox1 As System.Windows.Forms.PictureBox
        Private WithEvents vScrollBar1 As System.Windows.Forms.VScrollBar
        Private WithEvents hScrollBar1 As System.Windows.Forms.HScrollBar

        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub InitializeComponent()
            Me.openFileDialog1 = New System.Windows.Forms.OpenFileDialog()
            Me.pictureBox1 = New System.Windows.Forms.PictureBox()
            Me.vScrollBar1 = New System.Windows.Forms.VScrollBar()
            Me.hScrollBar1 = New System.Windows.Forms.HScrollBar()
            Me.pictureBox1.SuspendLayout()
            Me.SuspendLayout()
            Me.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
            Me.pictureBox1.Controls.AddRange(New System.Windows.Forms.Control() _
            {Me.vScrollBar1, Me.hScrollBar1})
            Me.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill
            Me.pictureBox1.Size = New System.Drawing.Size(440, 349)
            Me.vScrollBar1.Dock = System.Windows.Forms.DockStyle.Right
            Me.vScrollBar1.Location = New System.Drawing.Point(422, 0)
            Me.vScrollBar1.Size = New System.Drawing.Size(16, 331)
            Me.vScrollBar1.Visible = False
            Me.hScrollBar1.Dock = System.Windows.Forms.DockStyle.Bottom
            Me.hScrollBar1.Location = New System.Drawing.Point(0, 331)
            Me.hScrollBar1.Size = New System.Drawing.Size(438, 16)
            Me.hScrollBar1.Visible = False
            Me.ClientSize = New System.Drawing.Size(440, 349)
            Me.Controls.AddRange(New System.Windows.Forms.Control() _
                {Me.pictureBox1})
            Me.Text = "Form1"
            Me.pictureBox1.ResumeLayout(False)
            Me.ResumeLayout(False)
        End Sub

        <STAThread()> Shared Sub Main()
            Application.Run(New Form1())
        End Sub

        Private Sub pictureBox1_DoubleClick(ByVal sender As [Object], _
            ByVal e As EventArgs) _
          Handles pictureBox1.DoubleClick

            ' Open the dialog box so the user can select a new image.
            If openFileDialog1.ShowDialog() <> DialogResult.Cancel Then

                ' Display the image in the PictureBox.
                pictureBox1.Image = Image.FromFile(openFileDialog1.FileName)
                Me.DisplayScrollBars()
                Me.SetScrollBarValues()
            End If
        End Sub

        Private Sub Form1_Resize(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles MyBase.Resize

            ' If the PictureBox has an image, see if it needs
            ' scrollbars and refresh the image. 
            If Not (pictureBox1.Image Is Nothing) Then
                Me.DisplayScrollBars()
                Me.SetScrollBarValues()
                Me.Refresh()
            End If
        End Sub

        Public Sub DisplayScrollBars()

            ' If the image is wider than the PictureBox, show the HScrollBar.
            If pictureBox1.Width > pictureBox1.Image.Width - _
              Me.vScrollBar1.Width Then
                hScrollBar1.Visible = False
            Else
                hScrollBar1.Visible = True
            End If

            ' If the image is taller than the PictureBox, show the VScrollBar.
            If pictureBox1.Height > pictureBox1.Image.Height - _
              Me.hScrollBar1.Height Then
                vScrollBar1.Visible = False
            Else
                vScrollBar1.Visible = True
            End If
        End Sub

        Private Sub HandleScroll(ByVal sender As [Object], _
            ByVal se As ScrollEventArgs) _
          Handles vScrollBar1.Scroll, hScrollBar1.Scroll

            ' Create a graphics object and draw a portion 
            ' of the image in the PictureBox. 
            Dim g As Graphics = pictureBox1.CreateGraphics()

            g.DrawImage(pictureBox1.Image, _
                New Rectangle(0, 0, pictureBox1.Right - vScrollBar1.Width, _
                pictureBox1.Bottom - hScrollBar1.Height), _
                New Rectangle(hScrollBar1.Value, vScrollBar1.Value, _
                pictureBox1.Right - vScrollBar1.Width, _
                pictureBox1.Bottom - hScrollBar1.Height), GraphicsUnit.Pixel)
            pictureBox1.Update()
        End Sub

        Public Sub SetScrollBarValues()

            ' Set the Maximum, Minimum, LargeChange and SmallChange properties.
            Me.vScrollBar1.Minimum = 0
            Me.hScrollBar1.Minimum = 0

            ' If the offset does not make the Maximum less than zero, set its value.
            If Me.pictureBox1.Image.Size.Width - _
                pictureBox1.ClientSize.Width > 0 Then
                Me.hScrollBar1.Maximum = Me.pictureBox1.Image.Size.Width - _
                  pictureBox1.ClientSize.Width
            End If

            ' If the VScrollBar is visible, adjust the Maximum of the 
            ' HSCrollBar to account for the width of the VScrollBar.
            If Me.vScrollBar1.Visible Then
                Me.hScrollBar1.Maximum += Me.vScrollBar1.Width
            End If
            Me.hScrollBar1.LargeChange = CType(Me.hScrollBar1.Maximum / 10, Integer)
            Me.hScrollBar1.SmallChange = CType(Me.hScrollBar1.Maximum / 20, Integer)

            ' Adjust the Maximum value to make the raw Maximum value 
            ' attainable by user interaction.
            Me.hScrollBar1.Maximum += Me.hScrollBar1.LargeChange

            ' If the offset does not make the Maximum less than zero, 
            ' set its value.
            If Me.pictureBox1.Image.Size.Height - _
                pictureBox1.ClientSize.Height > 0 Then
                Me.vScrollBar1.Maximum = Me.pictureBox1.Image.Size.Height - _
                  pictureBox1.ClientSize.Height
            End If

            ' If the HScrollBar is visible, adjust the Maximum of the 
            ' VSCrollBar to account for the width of the HScrollBar.
            If Me.hScrollBar1.Visible Then
                Me.vScrollBar1.Maximum += Me.hScrollBar1.Height
            End If
            Me.vScrollBar1.LargeChange = CType(Me.vScrollBar1.Maximum / 10, Integer)
            Me.vScrollBar1.SmallChange = CType(Me.vScrollBar1.Maximum / 20, Integer)

            ' Adjust the Maximum value to make the raw Maximum 
            ' value attainable by user interaction.
            Me.vScrollBar1.Maximum += Me.vScrollBar1.LargeChange
        End Sub

package Scrollbar;

import System.*;
import System.Drawing.*;
import System.Collections.*;
import System.ComponentModel.*;
import System.Windows.Forms.*;

public class Form1 extends Form
{
    private OpenFileDialog openFileDialog1;
    private PictureBox pictureBox1;
    private VScrollBar vScrollBar1;
    private HScrollBar hScrollBar1;
  
    public Form1()
    {
        InitializeComponent();
    } 

    private void InitializeComponent()
    {
        this.openFileDialog1 = new OpenFileDialog();
        this.pictureBox1 = new PictureBox();
        this.vScrollBar1 = new VScrollBar();
        this.hScrollBar1 = new HScrollBar();
        this.pictureBox1.SuspendLayout();
        this.SuspendLayout();
        this.pictureBox1.set_BorderStyle(
            BorderStyle.FixedSingle);
        this.pictureBox1.get_Controls().AddRange(
            new Control[] { 
            this.vScrollBar1, this.hScrollBar1 });
        this.pictureBox1.set_Dock(DockStyle.Fill);
        this.pictureBox1.set_Size(new System.Drawing.Size(440, 349));
        this.pictureBox1.set_TabIndex(0);
        this.pictureBox1.set_TabStop(false);
        this.pictureBox1.add_DoubleClick(
            new System.EventHandler(this.pictureBox1_DoubleClick));
        this.vScrollBar1.set_Dock(DockStyle.Right);
        this.vScrollBar1.set_Location(new System.Drawing.Point(422, 0));
        this.vScrollBar1.set_Size(new System.Drawing.Size(16, 331));
        this.vScrollBar1.set_Visible(false);
        this.vScrollBar1.add_Scroll(
            new ScrollEventHandler(this.HandleScroll));
        this.hScrollBar1.set_Dock(DockStyle.Bottom);
        this.hScrollBar1.set_Location(new System.Drawing.Point(0, 331));
        this.hScrollBar1.set_Size(new System.Drawing.Size(438, 16));
        this.hScrollBar1.set_Visible(false);
        this.hScrollBar1.add_Scroll(
            new ScrollEventHandler(this.HandleScroll));
        this.set_ClientSize(new System.Drawing.Size(440, 349));
        this.get_Controls().AddRange(
            new Control[] { this.pictureBox1 });
        this.set_Text("Form1");
        this.add_Resize(new System.EventHandler(this.Form1_Resize));
        this.pictureBox1.ResumeLayout(false);
        this.ResumeLayout(false);
    }
    /** @attribute STAThread()
     */
    public static void main(String[] args)
    {
        Application.Run(new Form1());
    } 

    private void pictureBox1_DoubleClick(Object sender, EventArgs e)
    {
        // Open the dialog box so the user can select a new image.
        if (openFileDialog1.ShowDialog() != get_DialogResult().Cancel) {
    
            // Display the image in the PictureBox.
            pictureBox1.set_Image(Image.FromFile(
                openFileDialog1.get_FileName()));
            this.DisplayScrollBars();
            this.SetScrollBarValues();
        }
    } 

    protected void Form1_Resize(Object sender, EventArgs e)
    {
        /* If the PictureBox has an image, see if it needs 
           scrollbars and refresh the image. 
         */
        if (pictureBox1.get_Image() != null) {
            this.DisplayScrollBars();
            this.SetScrollBarValues();
            this.Refresh();
        }
    } 

    public void DisplayScrollBars()
    {
        // If the image is wider than the PictureBox, show the HScrollBar.
        if (pictureBox1.get_Width() > pictureBox1.get_Image().get_Width() 
            - this.vScrollBar1.get_Width()) {
                hScrollBar1.set_Visible(false);
        }
        else {
            hScrollBar1.set_Visible(true);
        }

        // If the image is taller than the PictureBox, show the VScrollBar.
        if (pictureBox1.get_Height() > pictureBox1.get_Image().get_Height() 
            - this.hScrollBar1.get_Height()) {
                vScrollBar1.set_Visible(false);
        }
        else {
            vScrollBar1.set_Visible(true);
        }
    } 

    private void HandleScroll(Object sender, ScrollEventArgs se)
    {
        /* Create a graphics object and draw a portion 
           of the image in the PictureBox. 
         */
        Graphics g = pictureBox1.CreateGraphics();

        g.DrawImage(pictureBox1.get_Image(), 
            new Rectangle(0, 0, 
            pictureBox1.get_Right() - vScrollBar1.get_Width(), 
            pictureBox1.get_Bottom() - hScrollBar1.get_Height()), 
            new Rectangle(hScrollBar1.get_Value(), 
            vScrollBar1.get_Value(), pictureBox1.get_Right() 
            - vScrollBar1.get_Width(), pictureBox1.get_Bottom() 
            - hScrollBar1.get_Height()), GraphicsUnit.Pixel);
        pictureBox1.Update();
    }

    public void SetScrollBarValues()
    {
        // Set the Maximum, Minimum, LargeChange and SmallChange properties.
        this.vScrollBar1.set_Minimum(0);
        this.hScrollBar1.set_Minimum(0);

        // If the offset does not make the Maximum less than zero, 
        // set its value. 
        if (this.pictureBox1.get_Image().get_Size().get_Width() 
            - pictureBox1.get_ClientSize().get_Width() > 0) {
                this.hScrollBar1.set_Maximum(
                    this.pictureBox1.get_Image().get_Size().get_Width() 
                    - pictureBox1.get_ClientSize().get_Width());
        }

        /* If the VScrollBar is visible, adjust the Maximum of the 
           HSCrollBar to account for the width of the VScrollBar. 
         */
        if (this.vScrollBar1.get_Visible()) {
            this.hScrollBar1.set_Maximum(this.hScrollBar1.get_Maximum() 
                + this.vScrollBar1.get_Width());
        }

        this.hScrollBar1.set_LargeChange(this.hScrollBar1.get_Maximum() / 10);
        this.hScrollBar1.set_SmallChange(this.hScrollBar1.get_Maximum() / 20);

        // Adjust the Maximum value to make the raw Maximum value attainable 
        // by user interaction.
        this.hScrollBar1.set_Maximum(this.hScrollBar1.get_Maximum() 
            + this.hScrollBar1.get_LargeChange());

        // If the offset does not make the Maximum less than zero, 
        // set its value.    
        if (this.pictureBox1.get_Image().get_Size().get_Height() 
            - pictureBox1.get_ClientSize().get_Height() > 0) {
                this.vScrollBar1.set_Maximum(
                    this.pictureBox1.get_Image().get_Size().get_Height() 
                    - pictureBox1.get_ClientSize().get_Height());
        }

        /* If the HScrollBar is visible, adjust the Maximum of the 
           VSCrollBar to account for the width of the HScrollBar.
         */
        if (this.hScrollBar1.get_Visible()) {
            this.vScrollBar1.set_Maximum(this.vScrollBar1.get_Maximum() 
                + this.hScrollBar1.get_Height());
        }

        this.vScrollBar1.set_LargeChange(this.vScrollBar1.get_Maximum() / 10);
        this.vScrollBar1.set_SmallChange(this.vScrollBar1.get_Maximum() / 20);

        // Adjust the Maximum value to make the raw Maximum value attainable 
        // by user interaction.
        this.vScrollBar1.set_Maximum(this.vScrollBar1.get_Maximum() 
            + this.vScrollBar1.get_LargeChange());
    } //SetScrollBarValues
   
} 

System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.Windows.Forms.Control
        System.Windows.Forms.ScrollBar
           System.Windows.Forms.HScrollBar
           System.Windows.Forms.VScrollBar

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.

.NET Framework

Supported in: 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 2.0, 1.0

Community Additions

ADD
Show: