Export (0) Print
Expand All
3 out of 6 rated this helpful - Rate this topic

ScrollBar Class

Implements the basic functionality of a scroll bar control.

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

[ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)] 
[ComVisibleAttribute(true)] 
public abstract class ScrollBar : Control
/** @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.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;


namespace Scrollbar
{
    public class Form1 :  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.BorderStyle = BorderStyle.FixedSingle;
         this.pictureBox1.Controls.AddRange(
             new Control[] { this.vScrollBar1, this.hScrollBar1});
         this.pictureBox1.Dock = DockStyle.Fill;
         this.pictureBox1.Size = new System.Drawing.Size(440, 349);
         this.pictureBox1.DoubleClick += new EventHandler(this.pictureBox1_DoubleClick);

         this.vScrollBar1.Dock = DockStyle.Right;
         this.vScrollBar1.Location = new System.Drawing.Point(422, 0);
         this.vScrollBar1.Size = new System.Drawing.Size(16, 331);
         this.vScrollBar1.Visible = false;
         this.vScrollBar1.Scroll += 
             new ScrollEventHandler(this.HandleScroll);
         
         this.hScrollBar1.Dock = DockStyle.Bottom;
         this.hScrollBar1.Location = new System.Drawing.Point(0, 331);
         this.hScrollBar1.Size = new System.Drawing.Size(438, 16);
         this.hScrollBar1.Visible = false;
         this.hScrollBar1.Scroll += 
             new ScrollEventHandler(this.HandleScroll);
         
         this.ClientSize = new System.Drawing.Size(440, 349);
         this.Controls.AddRange(new Control[] {this.pictureBox1});
         this.Text = "Form1";
         this.Resize += new System.EventHandler(this.Form1_Resize);
         this.pictureBox1.ResumeLayout(false);
         this.ResumeLayout(false);

      }

      [STAThread]
      static void Main() 
      {
         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() != DialogResult.Cancel)
   {
      // Display the image in the PictureBox.
      pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
      this.DisplayScrollBars();
      this.SetScrollBarValues();
   }
}
 
private void Form1_Resize (Object sender, EventArgs e)
{
   // If the PictureBox has an image, see if it needs 
   // scrollbars and refresh the image. 
   if(pictureBox1.Image != null)
   {
      this.DisplayScrollBars();
      this.SetScrollBarValues();
      this.Refresh();
   }
}
 
public void DisplayScrollBars()
{
   // If the image is wider than the PictureBox, show the HScrollBar.
   if (pictureBox1.Width > pictureBox1.Image.Width - this.vScrollBar1.Width)
   {
      hScrollBar1.Visible = false;
   }
   else
   {
      hScrollBar1.Visible = true;
   }
 
   // If the image is taller than the PictureBox, show the VScrollBar.
   if (pictureBox1.Height > 
       pictureBox1.Image.Height - this.hScrollBar1.Height)
   {
      vScrollBar1.Visible = false;
   }
   else
   {
      vScrollBar1.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.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();
}

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

   // If the offset does not make the Maximum less than zero, set its value. 
   if( (this.pictureBox1.Image.Size.Width - pictureBox1.ClientSize.Width) > 0)
   {
      this.hScrollBar1.Maximum = 
          this.pictureBox1.Image.Size.Width - pictureBox1.ClientSize.Width;
   }
   // If the VScrollBar is visible, adjust the Maximum of the 
   // HSCrollBar to account for the width of the VScrollBar.  
   if(this.vScrollBar1.Visible)
   {
      this.hScrollBar1.Maximum += this.vScrollBar1.Width;
   }
   this.hScrollBar1.LargeChange = this.hScrollBar1.Maximum / 10;
   this.hScrollBar1.SmallChange = this.hScrollBar1.Maximum / 20;

   // Adjust the Maximum value to make the raw Maximum value 
   // attainable by user interaction.
   this.hScrollBar1.Maximum += this.hScrollBar1.LargeChange;
     
   // If the offset does not make the Maximum less than zero, set its value.    
   if( (this.pictureBox1.Image.Size.Height - pictureBox1.ClientSize.Height) > 0)
   {
      this.vScrollBar1.Maximum = 
          this.pictureBox1.Image.Size.Height - pictureBox1.ClientSize.Height;
   }

   // If the HScrollBar is visible, adjust the Maximum of the 
   // VSCrollBar to account for the width of the HScrollBar.
   if(this.hScrollBar1.Visible)
   {
      this.vScrollBar1.Maximum += this.hScrollBar1.Height;
   }
   this.vScrollBar1.LargeChange = this.vScrollBar1.Maximum / 10;
   this.vScrollBar1.SmallChange = this.vScrollBar1.Maximum / 20;
   
    // Adjust the Maximum value to make the raw Maximum value 
   // attainable by user interaction.
   this.vScrollBar1.Maximum += this.vScrollBar1.LargeChange;
   }

  }
}

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:
© 2014 Microsoft. All rights reserved.