Csharp/CSharp Tutorial/GUI Windows Forms/Custom Control
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>