Csharp/CSharp Tutorial/GUI Windows Forms/Custom Control

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

Create control

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

Create your own component by subclassing System.ComponentModel.Component

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

The clock control

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