Csharp/CSharp Tutorial/GUI Windows Forms/Custom Control

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

Create control

<source lang="csharp">using System;

   using System.Drawing;
   using System.Collections;
   using System.ruponentModel;
   using System.Windows.Forms;
   using System.Data;
 public class UserControlForm : System.Windows.Forms.Form
 {
   private UserControlExample userControlExample1;
   private System.ruponentModel.Container components = null;
   public UserControlForm()
   {
     InitializeComponent();
   }
   protected override void Dispose( bool disposing )
   {
     if( disposing )
     {
       if (components != null) 
       {
         components.Dispose();
       }
     }
     base.Dispose( disposing );
   }
   private void InitializeComponent()
   {
     this.userControlExample1 = new UserControlExample();
     this.SuspendLayout();
     this.userControlExample1.Current = 5;
     this.userControlExample1.Location = new System.Drawing.Point(98, 113);
     this.userControlExample1.Max = 10;
     this.userControlExample1.Min = 0;
     this.userControlExample1.Name = "userControlExample1";
     this.userControlExample1.Size = new System.Drawing.Size(96, 40);
     this.userControlExample1.TabIndex = 0;
     // 
     // UserControlForm
     // 
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
     this.ClientSize = new System.Drawing.Size(292, 266);
     this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                     this.userControlExample1});
     this.Name = "UserControlForm";
     this.Text = "UserControlForm";
     this.ResumeLayout(false);
   }
   
   static void Main() 
   {
     Application.Run(new UserControlForm());
   }
 }
 public class UserControlExample : System.Windows.Forms.UserControl
 {
   private System.Windows.Forms.TextBox textBox1;
   private System.Windows.Forms.VScrollBar vScrollBar1;
   private System.ruponentModel.Container components = null;
   public UserControlExample()
   {
     InitializeComponent();
   }
   protected override void Dispose( bool disposing )
   {
     if( disposing )
     {
       if( components != null )
         components.Dispose();
     }
     base.Dispose( disposing );
   }
   private void InitializeComponent()
   {
     this.textBox1 = new System.Windows.Forms.TextBox();
     this.vScrollBar1 = new System.Windows.Forms.VScrollBar();
     this.SuspendLayout();
     this.textBox1.Location = new System.Drawing.Point(8, 8);
     this.textBox1.Name = "textBox1";
     this.textBox1.ReadOnly = true;
     this.textBox1.Size = new System.Drawing.Size(48, 20);
     this.textBox1.TabIndex = 0;
     this.textBox1.Text = "";
     this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
     this.vScrollBar1.Location = new System.Drawing.Point(64, 8);
     this.vScrollBar1.Name = "vScrollBar1";
     this.vScrollBar1.Size = new System.Drawing.Size(17, 24);
     this.vScrollBar1.TabIndex = 1;
     this.vScrollBar1.Scroll += new System.Windows.Forms.ScrollEventHandler(this.vScrollBar1_Scroll);
     this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                     this.vScrollBar1,
                                     this.textBox1});
     this.Name = "UserControlExample";
     this.Size = new System.Drawing.Size(96, 40);
     this.ResumeLayout(false);
   }
   private int m_min = int.MinValue;
   private int m_max = int.MaxValue;
   private int m_current = 0;
   private void vScrollBar1_Scroll(object sender, System.Windows.Forms.ScrollEventArgs e)
   {
     if ( e.Type == ScrollEventType.SmallIncrement )
     {
       try
       {
         Current -= 1;
       }
       catch
       {
       }
     }
     else
     {
       if ( e.Type == ScrollEventType.SmallDecrement )
       {
         try
         {
           Current += 1;
         }
         catch
         {
         }
       }
     }
     vScrollBar1.Value = 50;
   }
   public int Min
   {
     get
     {
       return m_min;
     }
     set
     {
       m_min = value;
     }
   }
   public int Max
   {
     get
     {
       return m_max;
     }
     set
     {
       m_max = value;
     }
   }
   public int Current
   {
     get
     {
       return m_current;
     }
     set
     {
       if ( ( value > m_max ) || ( value < m_min ) )
       {
         throw new ArgumentOutOfRangeException( "Current" );
       }
       m_current = value;
       textBox1.Text = m_current.ToString();
     }
   }
 }</source>

Create your own component by subclassing System.ComponentModel.Component

<source lang="csharp">using System; using System.ruponentModel; using System.Collections; using System.Diagnostics; public class MyComponent : System.ruponentModel.ruponent {

 private System.ruponentModel.Container components = null;
 public MyComponent(System.ruponentModel.IContainer container)
 {
   container.Add(this);
   InitializeComponent();
 }
 public MyComponent()
 {
   InitializeComponent();
 }
 private void InitializeComponent()
 {
   components = new System.ruponentModel.Container();
 }
 protected string m_message;
 public string Message
 {
   get
   {
     return m_message;
   }
   set
   {
     m_message = value;
   }
 }

}</source>

The clock control

<source lang="csharp">using System; using System.Collections; using System.ruponentModel; using System.Drawing; using System.Data; using System.Windows.Forms;

public class DigitalClock : System.Windows.Forms.UserControl {

   private System.Windows.Forms.Timer timer1;
   private System.ruponentModel.IContainer components;
   public DigitalClock() {
       this.ruponents = new System.ruponentModel.Container();
       this.timer1 = new System.Windows.Forms.Timer(this.ruponents);
       this.timer1.Enabled = true;
       this.timer1.Interval = 1000;
       this.timer1.Tick += new System.EventHandler(this.OnTick);
       this.Paint += new System.Windows.Forms.PaintEventHandler(this.OnPaint);
   }
   private void OnPaint(object sender,  System.Windows.Forms.PaintEventArgs e) {
       System.DateTime dt = System.DateTime.Now;
       String Text = dt.ToLongTimeString();
       e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor),ClientRectangle);
   }
   private void OnTick(object sender, System.EventArgs e) {
       this.Refresh();
   }

} public class Form1 : System.Windows.Forms.Form {

   private System.Windows.Forms.Label label1;
   private DigitalClock clock= new DigitalClock();
   public Form1() {
       this.label1 = new System.Windows.Forms.Label();
       this.SuspendLayout();
       this.label1.Location = new System.Drawing.Point(16, 24);
       this.label1.Size = new System.Drawing.Size(128, 16);
       this.label1.Text = "Clock:";
       this.clock.Location = new System.Drawing.Point(16, 50);
       this.clock.Size = new System.Drawing.Size(128, 80);
       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.label1,
             this.clock});
       this.ResumeLayout(false);
   }
   [STAThread]
   static void Main() {
       Application.Run(new Form1());
   }

}</source>