Csharp/CSharp Tutorial/GUI Windows Forms/Control
Содержание
- 1 Control Size and Location
- 2 Control Size and Location - Dynamic
- 3 Control: TabIndex, Size and Location
- 4 Control Tag Property
- 5 Create User Control based on Control class
- 6 Get controls on a form and verify its type
- 7 Override the DefaultSize property to gain better performance
- 8 Render onto the button
- 9 Set Caption(title) of the form
- 10 Set form forground color
Control Size and Location
<source lang="csharp">using System; using System.Drawing; using System.Windows.Forms; public class ControlSizeLocation : Form {
private Button btnShow; private Button btnChange; private Label lbl; public ControlSizeLocation() { BackColor = Color.LightBlue; ForeColor = Color.DarkBlue; Size = new Size(350,200); btnShow = new Button(); btnShow.Location = new Point(50,50); btnShow.Size = new Size(100,23); btnShow.Text = "Show"; btnShow.Click += new System.EventHandler(btnShow_Click); btnShow.Parent = this; btnChange = new Button(); btnChange.Location = new Point(200,50); btnChange.Size = new Size(100,23); btnChange.Text = "Change"; btnChange.Click += new System.EventHandler(btnChange_Click); btnChange.Parent = this; lbl = new Label(); lbl.Text = "Control Size and Location"; lbl.Size = new Size(400,25); lbl.Parent = this; } static void Main() { Application.Run(new ControlSizeLocation()); } private void btnShow_Click(object sender, EventArgs e) { Console.WriteLine("Button Bottom:" + btnShow.Bottom.ToString()); Console.WriteLine("Button Top:" + btnShow.Top.ToString() ); Console.WriteLine("Button Left:" + btnShow.Left.ToString() ); Console.WriteLine("Button Right:" + btnShow.Right.ToString() ); Console.WriteLine("Button Location:" + btnShow.Location.ToString() ); Console.WriteLine("Button Width:" + btnShow.Width.ToString() ); Console.WriteLine("Button Height:" + btnShow.Height.ToString() ); Console.WriteLine("Button Size:" + btnShow.Size.ToString() ); Console.WriteLine("Button ClientSize:" + btnShow.ClientSize.ToString() ); Console.WriteLine("Form Size:" + this.Size.ToString() ); Console.WriteLine("Form ClientSize:" + this.ClientSize.ToString()); } private void btnChange_Click(object sender, EventArgs e) { this.Size = new Size(800,200); }
}</source>
Control Size and Location - Dynamic
<source lang="csharp">using System; using System.Drawing; using System.Windows.Forms; public class ControlDynamicSizeLocation : Form {
private Button btnShow = new Button(); private Label lbl = new Label(); int xButtonSize, yButtonSize; public ControlDynamicSizeLocation() { btnShow.Parent = this; btnShow.Text = "Show Button Properties"; Size = new Size(400,400); xButtonSize = (int)(Font.Height * .75) * btnShow.Text.Length; yButtonSize = Font.Height * 2; btnShow.Size = new Size(xButtonSize, yButtonSize); btnShow.Click += new System.EventHandler(btnShow_Click); lbl.Text = "Control Size and Location - Dynamic"; lbl.AutoSize = true; lbl.Parent = this; OnResize(EventArgs.Empty); } protected override void OnResize(EventArgs e) { base.OnResize(e); int xPosition = (int)(this.ClientSize.Width / 2) - (int)(xButtonSize / 2); int yPosition = (int)(this.ClientSize.Height / 2) - (int)(yButtonSize / 2); btnShow.Location = new Point(xPosition, yPosition); } static void Main() { Application.Run(new ControlDynamicSizeLocation()); } private void btnShow_Click(object sender, EventArgs e) { Console.WriteLine("Button Bottom:" + btnShow.Bottom.ToString()); Console.WriteLine("Button Top:" + btnShow.Top.ToString() ); Console.WriteLine("Button Left:" + btnShow.Left.ToString() ); Console.WriteLine("Button Right:" + btnShow.Right.ToString() ); Console.WriteLine("Button Location:" + btnShow.Location.ToString() ); Console.WriteLine("Button Width:" + btnShow.Width.ToString() ); Console.WriteLine("Button Height:" + btnShow.Height.ToString() ); Console.WriteLine("Button Size:" + btnShow.Size.ToString() ); Console.WriteLine("Button ClientSize:" + btnShow.ClientSize.ToString() ); Console.WriteLine("Font:" + btnShow.Font.ToString()); }
}</source>
Control: TabIndex, Size and Location
<source lang="csharp">using System; using System.Windows.Forms; using System.Drawing; public class NotePadWindowsForms : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1; public NotePadWindowsForms() { button1 = new System.Windows.Forms.Button(); button1.Location = new System.Drawing.Point(8, 32); button1.Name = "button1"; button1.Size = new System.Drawing.Size(104, 32); button1.TabIndex = 0; button1.Text = "Click Me"; // Adding controls to the fomr Controls.AddRange(new System.Windows.Forms.Control[]{ button1} ); button1.Click += new System.EventHandler(button1_Click); }
private void button1_Click(object sender, System.EventArgs e) { MessageBox.Show("Button is clicked"); } public static int Main() { Application.Run(new NotePadWindowsForms()); return 0; }
}</source>
Control Tag Property
<source lang="csharp">using System; using System.Drawing; using System.Windows.Forms; public class Tags : Form {
Label lbl; public Tags() { Size = new Size(300,200); lbl = new Label(); lbl.Text = "Label"; lbl.AutoSize = true; lbl.Parent = this; lbl.Location = new Point(0,0); FontStyle theEnum = new FontStyle(); FontStyle[] theStyles = (FontStyle[])Enum.GetValues(theEnum.GetType()); int i = 1; foreach (FontStyle style in theStyles) { Button btn = new Button(); btn.Parent = this; btn.Location = new Point(25,25 * i++); btn.Size = new Size(75,20); btn.Text = style.ToString(); btn.Tag = style; btn.Click += new System.EventHandler(btn_Click); } } static void Main() { Application.Run(new Tags()); } private void btn_Click(object sender, EventArgs e) { Button btn = (Button)sender; FontStyle fs = (FontStyle)btn.Tag; lbl.Font = new Font(lbl.Font, fs); }
}</source>
Create User Control based on Control class
<source lang="csharp">using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.Windows.Forms; public class SpriteTest : Form {
public SpriteTest() { this.SuspendLayout(); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(295, 270); this.Text = "Sprite Test"; this.Load += new System.EventHandler(this.SpriteTest_Load); this.ResumeLayout(false); } private bool isDraggingA = false; private bool isDraggingB = false; private EllipseShape ellipseA, ellipseB; private void SpriteTest_Load(object sender, EventArgs e) { ellipseA = new EllipseShape(); ellipseA.Width = ellipseA.Height = 100; ellipseA.Top = ellipseA.Left = 30; ellipseA.BackColor = Color.Red; this.Controls.Add(ellipseA); ellipseB = new EllipseShape(); ellipseB.Width = ellipseB.Height = 100; ellipseB.Top = ellipseB.Left = 130; ellipseB.BackColor = Color.Azure; this.Controls.Add(ellipseB); ellipseA.MouseDown += new MouseEventHandler(Ellipse_MouseDown); ellipseA.MouseUp += new MouseEventHandler(Ellipse_MouseUp); ellipseA.MouseMove += new MouseEventHandler(Ellipse_MouseMove); ellipseB.MouseDown += new MouseEventHandler(Ellipse_MouseDown); ellipseB.MouseUp += new MouseEventHandler(Ellipse_MouseUp); ellipseB.MouseMove += new MouseEventHandler(Ellipse_MouseMove); } private void Ellipse_MouseDown(object sender, MouseEventArgs e) { Control control = (Control)sender; if (e.Button == MouseButtons.Left) { control.Tag = new Point(e.X, e.Y); if (control == ellipseA) { isDraggingA = true; } else { isDraggingB = true; } } } private void Ellipse_MouseUp(object sender, MouseEventArgs e) { isDraggingA = false; isDraggingB = false; } private void Ellipse_MouseMove(object sender, MouseEventArgs e) { Control control = (Control)sender; if ((isDraggingA && control == ellipseA) || (isDraggingB && control == ellipseB)) { Point point = (Point)control.Tag; control.Left = e.X + control.Left - point.X; control.Top = e.Y + control.Top - point.Y; } } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new SpriteTest()); }
} class EllipseShape : Control {
public EllipseShape(){} private GraphicsPath path = null; private void RefreshPath() { path = new GraphicsPath(); path.AddEllipse(this.ClientRectangle); this.Region = new Region(path); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); if (path != null) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; e.Graphics.FillPath(new SolidBrush(this.BackColor), path); e.Graphics.DrawPath(new Pen(this.ForeColor, 1), path); } } protected override void OnResize(System.EventArgs e) { base.OnResize(e); RefreshPath(); this.Invalidate(); }
}</source>
Get controls on a form and verify its type
<source lang="csharp">using System; using System.Windows.Forms; public class GetControlOnFormDemo {
[STAThread] public static void Main(string[] args) { Application.Run(new GetControlsOnForm()); }
} public partial class GetControlsOnForm : Form {
public GetControlsOnForm() { InitializeComponent(); } private void cmdProcessAll_Click(object sender, System.EventArgs e) { ProcessControls(this); } private void ProcessControls(Control ctrl) { // Ignore the control unless it"s a textbox. if (ctrl.GetType() == typeof(TextBox)) { ctrl.Text = ""; } foreach (Control ctrlChild in ctrl.Controls) { ProcessControls(ctrlChild); } }
} partial class GetControlsOnForm {
private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.TextBox textBox2; private System.Windows.Forms.TextBox textBox3; private System.Windows.Forms.TextBox textBox4; private System.Windows.Forms.Button cmdProcessAll; private System.ruponentModel.IContainer components = null; protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } private void InitializeComponent() { this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox2 = new System.Windows.Forms.TextBox(); this.textBox3 = new System.Windows.Forms.TextBox(); this.textBox4 = new System.Windows.Forms.TextBox(); this.cmdProcessAll = new System.Windows.Forms.Button(); this.SuspendLayout(); this.textBox1.Location = new System.Drawing.Point(16, 16); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(252, 20); this.textBox1.TabIndex = 0; this.textBox1.Text = "textBox1"; this.textBox2.Location = new System.Drawing.Point(16, 48); this.textBox2.Name = "textBox2"; this.textBox2.Size = new System.Drawing.Size(252, 20); this.textBox2.TabIndex = 1; this.textBox2.Text = "textBox2"; this.textBox3.Location = new System.Drawing.Point(16, 80); this.textBox3.Name = "textBox3"; this.textBox3.Size = new System.Drawing.Size(252, 20); this.textBox3.TabIndex = 2; this.textBox3.Text = "textBox3"; this.textBox4.Location = new System.Drawing.Point(16, 112); this.textBox4.Name = "textBox4"; this.textBox4.Size = new System.Drawing.Size(252, 20); this.textBox4.TabIndex = 3; this.textBox4.Text = "textBox4"; this.cmdProcessAll.Location = new System.Drawing.Point(20, 220); this.cmdProcessAll.Name = "cmdProcessAll"; this.cmdProcessAll.Size = new System.Drawing.Size(116, 28); this.cmdProcessAll.TabIndex = 4; this.cmdProcessAll.Text = "Process Text Boxes"; this.cmdProcessAll.Click += new System.EventHandler(this.cmdProcessAll_Click); this.ruponents = new System.ruponentModel.Container(); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.cmdProcessAll, this.textBox4, this.textBox3, this.textBox2, this.textBox1}); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Text = "GetControlsOnForm"; }
}</source>
Override the DefaultSize property to gain better performance
<source lang="csharp">using System; using System.Drawing; using System.Windows.Forms; public class FormWithDefaultSize : Form {
private Button btnShow; private Button btnChange; private Label lbl; protected override Size DefaultSize { get { return new Size(400,400); } } public FormWithDefaultSize() { BackColor = Color.LightBlue; ForeColor = Color.DarkBlue;
btnShow = new Button(); btnShow.Location = new Point(50,50); btnShow.Size = new Size(100,23); btnShow.Text = "Show"; btnShow.Click += new System.EventHandler(btnShow_Click); btnShow.Parent = this; btnChange = new Button(); btnChange.Location = new Point(200,50); btnChange.Size = new Size(100,23); btnChange.Text = "Change"; btnChange.Click += new System.EventHandler(btnChange_Click); btnChange.Parent = this; lbl = new Label(); lbl.Text = "Control Size and Location"; lbl.Size = new Size(400,25); lbl.Parent = this; } static void Main() { Application.Run(new FormWithDefaultSize()); } private void btnShow_Click(object sender, EventArgs e) { Console.WriteLine("Button Bottom:" + btnShow.Bottom.ToString()); Console.WriteLine("Button Top:" + btnShow.Top.ToString() ); Console.WriteLine("Button Left:" + btnShow.Left.ToString() ); Console.WriteLine("Button Right:" + btnShow.Right.ToString() ); Console.WriteLine("Button Location:" + btnShow.Location.ToString() ); Console.WriteLine("Button Width:" + btnShow.Width.ToString() ); Console.WriteLine("Button Height:" + btnShow.Height.ToString() ); Console.WriteLine("Button Size:" + btnShow.Size.ToString() ); Console.WriteLine("Button ClientSize:" + btnShow.ClientSize.ToString() ); Console.WriteLine("Form Size:" + this.Size.ToString() ); Console.WriteLine("Form ClientSize:" + this.ClientSize.ToString()); } private void btnChange_Click(object sender, EventArgs e) { this.Size = new Size(800,200); }
}</source>
Render onto the button
<source lang="csharp">using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Drawing2D; public class ButtonRenerer : System.Windows.Forms.Form {
private System.ruponentModel.Container components = null; private System.Windows.Forms.Button btnRenderedButton; private System.Windows.Forms.Button btnRenderToOtherButton; public ButtonRenerer() { InitializeComponent(); } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } private void InitializeComponent() { this.btnRenderedButton = new System.Windows.Forms.Button(); this.btnRenderToOtherButton = new System.Windows.Forms.Button(); this.SuspendLayout(); // // btnRenderedButton // this.btnRenderedButton.Location = new System.Drawing.Point(168, 120); this.btnRenderedButton.Name = "btnRenderedButton"; this.btnRenderedButton.Size = new System.Drawing.Size(112, 136); this.btnRenderedButton.TabIndex = 0; this.btnRenderedButton.Text = "Click on other button!"; // // btnRenderToOtherButton // this.btnRenderToOtherButton.Location = new System.Drawing.Point(168, 8); this.btnRenderToOtherButton.Name = "btnRenderToOtherButton"; this.btnRenderToOtherButton.Size = new System.Drawing.Size(112, 56); this.btnRenderToOtherButton.TabIndex = 1; this.btnRenderToOtherButton.Text = "Render to button"; // // ButtonRenerer // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Controls.Add(this.btnRenderToOtherButton); this.Controls.Add(this.btnRenderedButton); this.Name = "ButtonRenerer"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Basic Paint Form"; this.Paint += new System.Windows.Forms.PaintEventHandler(this.ButtonRenerer_Paint); this.ResumeLayout(false); } [STAThread] static void Main() { Application.Run(new ButtonRenerer()); } private void ButtonRenerer_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics buttonGraphics = Graphics.FromHwnd(btnRenderedButton.Handle); HatchBrush b = new HatchBrush(HatchStyle.Cross, Color.Purple, Color.Gold); buttonGraphics.FillRectangle(b, 0, 0, 50, btnRenderedButton.Height); }
}</source>
Set Caption(title) of the form
<source lang="csharp">using System; using System.Windows.Forms; using System.Drawing; public class FormTitleSetting : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1; private System.Windows.Forms.TextBox textBox1; public FormTitleSetting() { Text = "Test WinForm"; ForeColor = System.Drawing.Color.Yellow; button1 = new System.Windows.Forms.Button(); textBox1 = new System.Windows.Forms.TextBox(); // button control and its properties button1.Location = new System.Drawing.Point(8, 32); button1.Name = "button1"; button1.Size = new System.Drawing.Size(104, 32); button1.TabIndex = 0; button1.Text = "Click Me"; // text box control and its properties textBox1.Location = new System.Drawing.Point(24, 104); textBox1.Name = "textBox1"; textBox1.Size = new System.Drawing.Size(184, 20); textBox1.TabIndex = 1; textBox1.Text = "textBox1"; // Adding controls to the fomr Controls.AddRange(new System.Windows.Forms.Control[]{textBox1, button1} ); button1.Click += new System.EventHandler(button1_Click); } private void button1_Click(object sender,System.EventArgs e) { textBox1.Text = "Button is clicked"; MessageBox.Show("Button is clicked"); } public static int Main() { Application.Run(new FormTitleSetting()); return 0; }
}</source>
Set form forground color
<source lang="csharp">using System; using System.Windows.Forms; using System.Drawing; public class FormForegroundColorSetting : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1; private System.Windows.Forms.TextBox textBox1; public FormForegroundColorSetting() { Text = "Test WinForm"; ForeColor = System.Drawing.Color.Yellow; button1 = new System.Windows.Forms.Button(); textBox1 = new System.Windows.Forms.TextBox(); // button control and its properties button1.Location = new System.Drawing.Point(8, 32); button1.Name = "button1"; button1.Size = new System.Drawing.Size(104, 32); button1.TabIndex = 0; button1.Text = "Click Me"; // text box control and its properties textBox1.Location = new System.Drawing.Point(24, 104); textBox1.Name = "textBox1"; textBox1.Size = new System.Drawing.Size(184, 20); textBox1.TabIndex = 1; textBox1.Text = "textBox1"; // Adding controls to the fomr Controls.AddRange(new System.Windows.Forms.Control[]{textBox1, button1} ); button1.Click += new System.EventHandler(button1_Click); } private void button1_Click(object sender,System.EventArgs e) { textBox1.Text = "Button is clicked"; MessageBox.Show("Button is clicked"); } public static int Main() { Application.Run(new FormForegroundColorSetting()); return 0; }
}</source>