Systems Programming &
Scripting
Lecture 6: C# GUI Development
Systems Prog. & Script. - Heriot Watt Univ
Blank Form
Systems Prog. & Script. - Heriot Watt Univ
First Form Code
using System;
using System.Drawing;
using System.Windows.Forms;
public class HelloWorld : Form
{
static public void Main ()
{
Application.Run (new HelloWorld ());
}
public HelloWorld ()
{
Button b = new Button ();
b.Text = "Click Me!";
b.Click += new EventHandler (Button_Click);
Controls.Add (b);
}
private void Button_Click (object sender, EventArgs e)
{
MessageBox.Show ("Button Clicked!");
}
}
Systems Prog. & Script. - Heriot Watt Univ
Discussion
The main GUI library to import is System.Windows.Forms
Our form HelloWorld inherits from the Form class in the
above library
The form is created by calling Application.Run on an
instance of the HelloWorld class.
The constructor of the class HelloWorld defines the
contents and layout.
It also associates an event handler with the button
component of the form.
This way, on clicking the button the text Button Clicked
will appear.
Systems Prog. & Script. - Heriot Watt Univ
First Form Code
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
class Form1 : Form
{
public Form1()
{
Text = "My First Form";
}
static void Main()
{
Form1 f1 = new Form1();
Application.Run(f1);
}
}
}
Systems Prog. & Script. - Heriot Watt Univ
Code Explained
The System.Windows.Forms namespace
contains most classes for developing GUIs.
Form1 inherits the Form class.
Text is a property used to get/set the title of the
form.
An instance of Form1 is created in Main().
The Run() function of the Application class is an
argument to display the form on the screen.
Systems Prog. & Script. - Heriot Watt Univ
Example: echo textbox
Imported modules for GUI programs:
using System;
using System.Drawing;
using System.Windows.Forms;
Systems Prog. & Script. - Heriot Watt Univ
Example: echo textbox
class MForm : Form {
private Label text;
public MForm() {
Text = "TextBox";
Size = new Size(250, 200);
CenterToScreen();
text = new Label();
text.Parent = this;
text.Text = "...";
text.Location = new Point(60, 40);
text.AutoSize = true;
TextBox tbox = new TextBox();
tbox.Parent = this;
tbox.Location = new Point(60, 100);
tbox.KeyUp += new KeyEventHandler(OnKeyUp);
Systems Prog. & Script. - Heriot Watt Univ
Example: echo textbox
void OnKeyUp(object sender, KeyEventArgs e) {
TextBox tb = (TextBox) sender;
this.text.Text = tb.Text;
}
}
// Main class
class MApplication {
public static void Main() {
Application.Run(new MForm());
}
}
Systems Prog. & Script. - Heriot Watt Univ
Discussion
The main GUI library to import is
System.Windows.Forms
Our MForm class inherits from Form.
The MForm method defines contents and
positioning of the form.
It also associates an event handler OnKeyUp to
the textbox
The OnKeyUp handler simply displays the text
typed in so far.
A standard Main method starts the application.
Systems Prog. & Script. - Heriot Watt Univ
10
GUI creation in Visual Studio
Most of the time you will use Visual Studio to automatically
generate the code for a GUI.
This way, all the boilerplate code is generated automatically.
Only the worker code, such as event handlers, needs to be
written explicitly.
The best way to learn this is by familiarising yourself with
Visual Studio, creating some simple forms.
Here is just a small example, demonstrating the structure of
the automatically generated code.
Systems Prog. & Script. - Heriot Watt Univ
11
Form Properties
Systems Prog. & Script. - Heriot Watt Univ
12
Form Events
Systems Prog. & Script. - Heriot Watt Univ
13
Adding Numbers
Systems Prog. & Script. - Heriot Watt Univ
14
Generated Code
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
partial class Form1 : Form
{
private System.ComponentModel.IContainer
components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Systems Prog. & Script. - Heriot Watt Univ
15
Generated Code (cont'd)
public Form1 ()
{
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.label3 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(33, 40);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(78, 13);
this.label1.TabIndex = 0;
this.label1.Text = "First Number
";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(33, 76);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(84, 13);
this.label2.TabIndex = 1;
this.label2.Text = "Second Number";
Systems Prog. & Script. - Heriot Watt Univ
16
Generated Code (cont'd)
// textBox1
this.textBox1.Location = new System.Drawing.Point(147, 33);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(100, 20);
this.textBox1.TabIndex = 2;
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(147, 69);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(100, 20);
this.textBox2.TabIndex = 3;
//
// button1
//
this.button1.Location = new System.Drawing.Point(102, 135);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(100, 23);
this.button1.TabIndex = 4;
this.button1.Text = "Add Numbers";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(126, 196);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(35, 13);
this.label3.TabIndex = 5;
this.label3.Text = "";
Systems Prog. & Script. - Heriot Watt Univ
17
Generated Code (cont'd)
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.label3);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.InitializeComponent);
this.ResumeLayout(false);
this.PerformLayout();
}
Systems Prog. & Script. - Heriot Watt Univ
18
Generated Code (cont'd)
private
private
private
private
private
private
System.Windows.Forms.Label label1;
System.Windows.Forms.Label label2;
System.Windows.Forms.TextBox textBox1;
System.Windows.Forms.TextBox textBox2;
System.Windows.Forms.Button button1;
System.Windows.Forms.Label label3;
// event handlers
private void InitializeComponent(object sender, EventArgs e)
{
// put intialization code here
}
private void button1_Click(object sender, EventArgs e)
{
string inValue1, inValue2;
double val1, val2, result;
inValue1 = textBox1.Text;
inValue2 = textBox2.Text;
val1 = double.Parse(inValue1);
val2 = double.Parse(inValue2);
result = val1 + val2;
label3.Text = result.ToString();
}
}
Systems Prog. & Script. - Heriot Watt Univ
19
Generated Code (cont'd)
public class MainClass {
static public void Main ()
{
Application.Run (new Form1());
}
}
}
Systems Prog. & Script. - Heriot Watt Univ
20
Code Generated by Visual Studio
namespace WindowsFormsApplication1
{
partial class Form1 : Form
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (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>
Systems Prog. & Script. - Heriot Watt Univ
21
Cont. Code Generated by Visual
Studio
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.label3 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(33, 40);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(78, 13);
this.label1.TabIndex = 0;
this.label1.Text = "First Number
";
Systems Prog. & Script. - Heriot Watt Univ
22
Cont. Code Generated by Visual
Studio
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(33, 76);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(84, 13);
this.label2.TabIndex = 1;
this.label2.Text = "Second Number";
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(147, 33);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(100, 20);
this.textBox1.TabIndex = 2;
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(147, 69);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(100, 20);
this.textBox2.TabIndex = 3;
Systems Prog. & Script. - Heriot Watt Univ
23
Cont. Code Generated by Visual
Studio
//
// button1
//
this.button1.Location = new System.Drawing.Point(102, 135);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(100, 23);
this.button1.TabIndex = 4;
this.button1.Text = "Add Numbers";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new
System.EventHandler(this.button1_Click);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(126, 196);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(35, 13);
this.label3.TabIndex = 5;
this.label3.Text = "label3";
Systems Prog. & Script. - Heriot Watt Univ
24
Cont. Code Generated by Visual
Studio
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.label3);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private
private
private
private
private
private
System.Windows.Forms.Label label1;
System.Windows.Forms.Label label2;
System.Windows.Forms.TextBox textBox1;
System.Windows.Forms.TextBox textBox2;
System.Windows.Forms.Button button1;
System.Windows.Forms.Label label3;
}
}
Systems Prog. & Script. - Heriot Watt Univ
25
Event Handler
private void button1_Click(object sender, EventArgs e)
{
string inValue1, inValue2;
double val1, val2, result;
inValue1 = textBox1.Text;
inValue2 = textBox2.Text;
val1 = double.Parse(inValue1);
val2 = double.Parse(inValue2);
result = val1 + val2;
label3.Text = result.ToString();
}
Systems Prog. & Script. - Heriot Watt Univ
26
Code
Since you use Visual C# to develop this
form, Visual Studio will generate the basic
coding for all the items that you place in the
form.
You have to write your own code when you
want to perform any operations on the items,
i.e. to handle any events, change the
properties etc.
Systems Prog. & Script. - Heriot Watt Univ
27
Exercise
Create a form with several buttons, text
boxes, change the properties and define
different events associated with the
buttons.
Systems Prog. & Script. - Heriot Watt Univ
28
Useful Links
Various C# tutorials:
www.functionx.com/vcsharp/index.htm
Mono C# Winforms Tutorial:
http://zetcode.com/tutorials/monowinformstutorial/
Systems Prog. & Script. - Heriot Watt Univ
29