HOW TO:捲動表單內容

更新:2007 年 11 月

利用 Panel 控制項,您可以將它的 AutoScroll 屬性設定為 true,並垂直捲動其內容。但是,若要同時垂直捲動和水平捲動,則您需要加入捲軸來定義其屬性。

範例

此範例顯示如何使用水平捲軸控制項和垂直捲軸控制項,將表單上的影像橫向捲動和向下捲動。當您按一下捲軸時,面板的 LeftLeft 屬性會根據捲軸值變更,從而建立捲動的經驗。

此範例會在表單中建立一個大型影像,或一個有兩條對角線 (連接四個角) 的矩形。

ValueChanged 事件的事件處理程式碼會依捲軸的變更值,來變更 PanelLeftLeft 屬性。當您以水平捲軸向右捲動,且以垂直捲軸向下捲動時,這些屬性會減少。相反地,往相反方向捲動時這些屬性便會增加。

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;
        }
    }
}

編譯程式碼

這個範例需要下列命名空間的參考:

請參閱

工作

HOW TO:處理方向和解析度變更

其他資源

.NET Compact Framework 中的 Windows Form 控制項