Csharp/C Sharp/GUI Windows Form/ScrollBar

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

ScrollBars Demo

<source lang="csharp"> /* Professional Windows GUI Programming Using C# by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury,

  Zach Greenvoss, Shripad Kulkarni, Neil Whitlow

Publisher: Peer Information ISBN: 1861007663

  • /

using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; namespace ScrollBars {

   /// <summary>
   /// Summary description for ScrollBars.
   /// </summary>
   public class ScrollBars : System.Windows.Forms.Form
   {
       private System.Windows.Forms.TextBox textBox1;
       private System.Windows.Forms.VScrollBar vScrollBar1;
       /// <summary>
       /// Required designer variable.
       /// </summary>
       int counter=0;
       private System.Windows.Forms.Label label1;
       private System.ruponentModel.Container components = null;
       public ScrollBars()
       {
           //
           // Required for Windows Form Designer support
           //
           InitializeComponent();
           //
           // TODO: Add any constructor code after InitializeComponent call
           //
       }
       /// <summary>
       /// Clean up any resources being used.
       /// </summary>
       protected override void Dispose( bool disposing )
       {
           if( disposing )
           {
               if (components != null) 
               {
                   components.Dispose();
               }
           }
           base.Dispose( disposing );
       }
       #region Windows Form Designer generated code
       /// <summary>
       /// Required method for Designer support - do not modify
       /// the contents of this method with the code editor.
       /// </summary>
       private void InitializeComponent()
       {
           this.textBox1 = new System.Windows.Forms.TextBox();
           this.vScrollBar1 = new System.Windows.Forms.VScrollBar();
           this.label1 = new System.Windows.Forms.Label();
           this.SuspendLayout();
           // 
           // textBox1
           // 
           this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
           this.textBox1.ForeColor = System.Drawing.Color.Transparent;
           this.textBox1.Location = new System.Drawing.Point(24, 56);
           this.textBox1.Multiline = true;
           this.textBox1.Name = "textBox1";
           this.textBox1.ReadOnly = true;
           this.textBox1.Size = new System.Drawing.Size(144, 32);
           this.textBox1.TabIndex = 4;
           this.textBox1.Text = "";
           this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
           // 
           // vScrollBar1
           // 
           this.vScrollBar1.Location = new System.Drawing.Point(168, 56);
           this.vScrollBar1.Name = "vScrollBar1";
           this.vScrollBar1.Size = new System.Drawing.Size(16, 32);
           this.vScrollBar1.TabIndex = 7;
           this.vScrollBar1.Scroll += new System.Windows.Forms.ScrollEventHandler(this.vScrollBar1_Scroll);
           // 
           // label1
           // 
           this.label1.Location = new System.Drawing.Point(8, 16);
           this.label1.Name = "label1";
           this.label1.Size = new System.Drawing.Size(192, 16);
           this.label1.TabIndex = 6;
           this.label1.Text = "Numeric Scolling using VScroll Bars";
           // 
           // ScrollBars
           // 
           this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
           this.ClientSize = new System.Drawing.Size(208, 109);
           this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                         this.label1,
                                                                         this.vScrollBar1,
                                                                         this.textBox1});
           this.Name = "ScrollBars";
           this.Text = "Numeric Scroll";
           this.Load += new System.EventHandler(this.ScrollBars_Load);
           this.ResumeLayout(false);
       }
       #endregion
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new ScrollBars());
       }
       private void textBox1_TextChanged(object sender, System.EventArgs e)
       {
       }
       private void ScrollBars_Load(object sender, System.EventArgs e)
       {
           // Set the maximum range for the scrollbar
           vScrollBar1.Maximum = 100;
           // Set the minimum range for the scrollbar
           vScrollBar1.Minimum = 0 ; 
           // Set the SmallChange factor
           vScrollBar1.SmallChange = 1;    
       }
       private void vScrollBar1_Scroll(object sender, System.Windows.Forms.ScrollEventArgs e)
       {
           // Check if the increment is Small 
        if ( e.Type == ScrollEventType.Last ) 
           counter = 100  ; 
        else
           // Check if the scroll is moved to minimum pos
           if ( e.Type == ScrollEventType.First) 
           counter = 0  ; 
        else
           // Check if the scroll is moved small distance
           if ( e.Type == ScrollEventType.SmallDecrement ) 
           counter -- ; 
        else
           // Check if the scroll is moved small distance
           if ( e.Type == ScrollEventType.SmallIncrement )
        {
           counter++;
           MessageBox.Show("Small increment");
        }
        else
           // Check if the scroll is moved large distance
           if ( e.Type == ScrollEventType.LargeDecrement ) 
           counter-=5;
        else
           // Check if the scroll is moved large distance
           if ( e.Type == ScrollEventType.LargeIncrement )
        {
           MessageBox.Show("Large increment");
           counter+=5;
        }
        else
           // Check if the scroll is moved to the Min position
           if ( e.Type == ScrollEventType.First ) 
           counter = 0 ; 
        else
           // Check if the scroll to the Max position
           if ( e.Type == ScrollEventType.Last) 
           counter = 100  ; 
       Console.WriteLine(e.NewValue+"\n");
       // Check if the scroll is moved large distance
           if ( counter > 100 ) counter = 100 ; 
           if ( counter < 0 ) counter = 0 ;
           textBox1.Text = counter.ToString() ;
       }
   }

}


      </source>


Scroll event

<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; public class Form1 : System.Windows.Forms.Form {

   private System.Windows.Forms.TextBox textBox1;
   private System.Windows.Forms.VScrollBar vScrollBar1;
   int counter = 0;
   private System.Windows.Forms.Label label1;
   public Form1() {
       this.textBox1 = new System.Windows.Forms.TextBox();
       this.vScrollBar1 = new System.Windows.Forms.VScrollBar();
       this.label1 = new System.Windows.Forms.Label();
       this.SuspendLayout();
       this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
       this.textBox1.ForeColor = System.Drawing.Color.Transparent;
       this.textBox1.Location = new System.Drawing.Point(24, 56);
       this.textBox1.Multiline = true;
       this.textBox1.ReadOnly = true;
       this.textBox1.Size = new System.Drawing.Size(144, 32);
       this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
       this.vScrollBar1.Location = new System.Drawing.Point(168, 56);
       this.vScrollBar1.Size = new System.Drawing.Size(16, 32);
       this.vScrollBar1.Scroll += new System.Windows.Forms.ScrollEventHandler(this.vScrollBar1_Scroll);
       this.label1.Location = new System.Drawing.Point(8, 16);
       this.label1.Size = new System.Drawing.Size(192, 16);
       this.label1.Text = "Numeric Scolling using VScroll Bars";
       this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
       this.ClientSize = new System.Drawing.Size(208, 109);
       this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                     this.label1,
                                     this.vScrollBar1,
                                     this.textBox1});
       this.Text = "Numeric Scroll";
       this.Load += new System.EventHandler(this.Form1_Load);
       this.ResumeLayout(false);
   }
   [STAThread]
   static void Main() {
       Application.Run(new Form1());
   }
   private void textBox1_TextChanged(object sender, System.EventArgs e) {
   }
   private void Form1_Load(object sender, System.EventArgs e) {
       vScrollBar1.Maximum = 100;
       vScrollBar1.Minimum = 0;
       vScrollBar1.SmallChange = 1;
   }
   private void vScrollBar1_Scroll(object sender, System.Windows.Forms.ScrollEventArgs e) {
       if (e.Type == ScrollEventType.Last)
           counter = 100;
       if (e.Type == ScrollEventType.First)
           counter = 0;
       if (e.Type == ScrollEventType.SmallDecrement)
           counter--;
       if (e.Type == ScrollEventType.SmallIncrement) {
           counter++;
       } 
       if (e.Type == ScrollEventType.LargeDecrement)
           counter -= 5;
       if (e.Type == ScrollEventType.LargeIncrement) {
           counter += 5;
       } 
       if (e.Type == ScrollEventType.First)
           counter = 0;
       if (e.Type == ScrollEventType.Last)
           counter = 100;
       Console.WriteLine(e.NewValue + "\n");
       if (counter > 100) counter = 100;
       if (counter < 0) counter = 0;
       Console.WriteLine(counter.ToString());
   }

}

</source>


Use ScrollBar to control the picture size

<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; public class Sizer : System.Windows.Forms.Form {

   private System.Windows.Forms.PictureBox picCritter;
   private System.Windows.Forms.HScrollBar scrSize;
   
   public static void Main(){
       Application.Run(new Sizer());
   } 
   public Sizer() {
       InitializeComponent();
   }
   private void InitializeComponent() {
     this.picCritter = new System.Windows.Forms.PictureBox();
     this.scrSize = new System.Windows.Forms.HScrollBar();
     this.SuspendLayout();
     this.picCritter.BackColor = System.Drawing.Color.White;
     this.picCritter.Image = new Bitmap("winter.jpg");
     this.picCritter.Location = new System.Drawing.Point(8, 8);
     this.picCritter.Name = "picCritter";
     this.picCritter.Size = new System.Drawing.Size(40, 40);
     this.picCritter.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
     this.picCritter.TabIndex = 0;
     this.picCritter.TabStop = false;
     this.scrSize.Location = new System.Drawing.Point(16, 248);
     this.scrSize.Maximum = 200;
     this.scrSize.Minimum = 50;
     this.scrSize.Name = "scrSize";
     this.scrSize.Size = new System.Drawing.Size(256, 16);
     this.scrSize.TabIndex = 1;
     this.scrSize.Value = 50;
     this.scrSize.Scroll += new System.Windows.Forms.ScrollEventHandler(this.scrSize_Scroll);
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
     this.ClientSize = new System.Drawing.Size(292, 273);
     this.Controls.AddRange(new System.Windows.Forms.Control[] {this.scrSize,
                                                                 this.picCritter});
     this.Name = "Sizer";
     this.Text = "Sizer";
     this.ResumeLayout(false);
 }
 private void scrSize_Scroll(object sender, System.Windows.Forms.ScrollEventArgs e) {
     picCritter.Size = new Size(scrSize.Value, scrSize.Value);
 }

}

      </source>


VScrollBar ValueChanged

<source lang="csharp">

using System; using System.Drawing; using System.Windows.Forms;

class ColorScroll: Form {

    Panel        panel;
    Label[]      alabelName  = new Label[3];
    Label[]      alabelValue = new Label[3];
    VScrollBar[] avscroll    = new VScrollBar[3];
  
    public static void Main()
    {
         Application.Run(new ColorScroll());
    }
    public ColorScroll()
    {
         Color[] acolor = { Color.Red, Color.Green, Color.Blue };
 
         panel = new Panel();
         panel.Parent = this;
         panel.Location = new Point(0, 0);
         panel.BackColor = Color.White;
  
         for (int i = 0; i < 3; i++)
         {
              alabelName[i] = new Label();
              alabelName[i].Parent = panel;
              alabelName[i].ForeColor = acolor[i];
              alabelName[i].Text = "&" + acolor[i].ToKnownColor();
              alabelName[i].TextAlign = ContentAlignment.MiddleCenter;
  
              avscroll[i] = new VScrollBar();
              avscroll[i].Parent = panel;
              avscroll[i].SmallChange = 1;
              avscroll[i].LargeChange = 16;
              avscroll[i].Minimum  = 0;
              avscroll[i].Maximum = 255 + avscroll[i].LargeChange - 1;
              avscroll[i].ValueChanged += new EventHandler(ScrollOnValueChanged);
              avscroll[i].TabStop = true;
  
              alabelValue[i] = new Label();
              alabelValue[i].Parent = panel;
              alabelValue[i].TextAlign = ContentAlignment.MiddleCenter;
         }
         Color color = BackColor;
         avscroll[0].Value = color.R;  // Generates ValueChanged event
         avscroll[1].Value = color.G;
         avscroll[2].Value = color.B;
  
         OnResize(EventArgs.Empty);
    }
    protected override void OnResize(EventArgs ea)
    {
         base.OnResize(ea);
  
         int cx = ClientSize.Width;
         int cy = ClientSize.Height;
         int cyFont = Font.Height;
  
         panel.Size = new Size(cx / 2, cy);
  
         for (int i = 0; i < 3; i++)
         {
              alabelName[i].Location = new Point(i * cx / 6, cyFont / 2);
              alabelName[i].Size = new Size(cx / 6, cyFont);
  
              avscroll[i].Location = new Point((4 * i + 1) * cx / 24,
                                               2 * cyFont);
              avscroll[i].Size = new Size(cx / 12, cy - 4 * cyFont);
  
              alabelValue[i].Location = new Point(i * cx / 6,
                                                  cy - 3 * cyFont / 2);
              alabelValue[i].Size = new Size(cx / 6, cyFont);
         }
    }
    void ScrollOnValueChanged(Object obj, EventArgs ea)
    {
         for (int i = 0; i < 3; i++)
              if((VScrollBar) obj == avscroll[i])
                   alabelValue[i].Text = avscroll[i].Value.ToString();
  
         BackColor = Color.FromArgb(avscroll[0].Value, 
                                    avscroll[1].Value,
                                    avscroll[2].Value);
    }

}

</source>