Chapter 13. Graphical User Interface
Concepts: Part 1
 2007 Dr. Natheer Khasawneh.
Simple Windows Application
• In Visual Studio 2005, if you choose
– File->New Project
– Windows Application
• The following will be generated for you
– Form1.cs
– Form1.Designer.cs
– Program.cs
• Lets look at them
 2007 Dr. Natheer Khasawneh.
 2007 Dr. Natheer Khasawneh.
Program.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace SimpleApplication
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
What is this?
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
 2007 Dr. Natheer Khasawneh.
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace SimpleApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
 2007 Dr. Natheer Khasawneh.
Form1.Designer.cs
namespace SimpleApplication
{
partial class Form1
{
/// <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>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "Form1";
}
#endregion
}
}
 2007 Dr. Natheer Khasawneh.
Application Class
• The System.Windows.Forms.Application class wraps the
basic functionality to start a .NET application.
• This class has methods to start and stop applications and
their threads, and to process Windows Messages:
– DoEvents()
– Exit()
– ExitThread()
– Run()
• The class also has events and properties to synchronize
execution.
 2007 Dr. Natheer Khasawneh.
Application Class
• Run static method begins running a standard
application message loop on the current thread.
• Below is the overload list:
 2007 Dr. Natheer Khasawneh.
Partial Class
• A partial class, or partial type, is a feature of C#
programming languages in which the declaration
of a class or a struct or an interface may be split
across multiple source-code files.
• Purpose
– Very large classes
– Separation of concerns
– Multiple developer
 2007 Dr. Natheer Khasawneh.
Windows Forms
• Forms are contained within a namespace called
System.Windows.Forms that contains around 200
classes, 100 enumeration, more than 40 delegates,
7 interfaces, and 4 structures.
• The inheritance lineage is
Object ->
MarshallByRefObject ->
Component->
Control->
ScrollableControl->
Form
 2007 Dr. Natheer Khasawneh.
Windows Forms
Form Properties and
Description / Delegate and Event Arguments
Events
Common Properties
AcceptButton
Which button will be clicked when Enter is pressed.
AutoScroll
Whether scrollbars appear when needed (if data fills more than one
screen).
CancelButton
Button that is clicked when the Escape key is pressed.
FormBorderStyle
Border of the form (e.g., none, single, 3D, sizable).
Font
Font of text displayed on the form, as well as the default font of
controls added to the form.
Text
Text in the form’s title bar.
Common Methods
Close
Closes form and releases all resources. A closed form cannot be
reopened.
Hide
Hides form (does not release resources).
Show
Displays a hidden form.
Common Events
(Delegate EventHandler, event arguments EventArgs)
Load
Occurs before a form is shown. This event is the default when the
form is double-clicked in the Visual Studio .NET designer.
Fig. 13.4
Common Form properties and events.
 2007 Dr. Natheer Khasawneh.
Form
• Form class represents window, provides appropriate services
– properties: Size, Location, Controls, ShowInTaskbar
– methods: Show, Close, SetDesktopLocation
– events: Load, Click, Closing
• Common to derive from Form to create custom form
define custom form
set properties
class MyForm : Form
{
public MyForm()
{
this.ShowInTaskbar = false;
this.Location
= new Point(10, 10);
this.Size
= new Size(100, 100);
}
}
 2007 Dr. Natheer Khasawneh.
Form border
• Forms can look like windows, dialogs, or tools
– controlled using FormBorderStyle property
– set ShowInTaskbar property to false for tool windows
– window border styles show the icon from the Icon property
 2007 Dr. Natheer Khasawneh.
Form properties
• Form has many properties
– used to customize appearance and behavior
public class Form : ContainerControl
{
public IButtonControl AcceptButton { get; set; }
public IButtonControl CancelButton { get; set; }
public bool
HelpButton
{ get; set; }
public Icon
Icon { get; set; }
public String Text { get; set; }
public Size MaximumSize { get; set; }
public Size MinimumSize { get; set; }
properties
public MainMenu Menu { get; set; }
public bool ShowInTaskbar { get; set; }
public FormBorderStyle FormBorderStyle { get; set; }
...
}
 2007 Dr. Natheer Khasawneh.
SimpleForm.cs
using System;
using System.Windows.Forms;
class SimpleForm
csc /t:winexe SimpleForm.cs
{
static void Main()
{
Form f1 = new Form();
f1.Text = "My Simple Form";
Application.Run(f1);
}
}
 2007 Dr. Natheer Khasawneh.
SimpleForm2.cs
using System;
using System.Windows.Forms;
class SimpleForm
{
static void Main()
{
Form f1 = new Form();
f1.Text = "My Simple Form2";
f1.Show();
}
}
 2007 Dr. Natheer Khasawneh.
What is the output?
SimpleForm3.cs
using System.Threading;
using System.Windows.Forms;
class SimpleForm
{
static void Main()
What is the output?
{
Form f1 = new Form();
f1.Text = "My Simple Form3";
f1.Show();
f1.Text = "Time to sleep";
//Let the process go to sleep for 1000 ms (pause)
Thread.Sleep(3000);
f1.Text = "Time to wake up !";
//Let the process go to sleep for 1000 ms (pause)
Thread.Sleep(1000);
}
}
 2007 Dr. Natheer Khasawneh.
SimpleForm4.cs
using System.Threading;
using System.Windows.Forms;
class SimpleForm
{
public static void Main()
{
What is the output?
Form f1 = new Form();
f1.Text = "What is wrong with this?";
f1.Visible = true; Thread.Sleep(3000);
f1.Visible = false; Thread.Sleep(3000);
f1.Text = "Coming back to live";
f1.Visible = true; Thread.Sleep(3000);
Application.Run();
f1.Text = "After Application.Run is called";
}
}
 2007 Dr. Natheer Khasawneh.
SimpleForm5.cs
using System.Threading;
using System.Windows.Forms;
class SimpleForm
{
public static void Main()
{
What is the output?
Form f1 = new Form();
f1.Text = "What is wrong with this?";
f1.Visible = true; Thread.Sleep(3000);
f1.Visible = false; Thread.Sleep(3000);
f1.Text = "Coming back to live";
f1.Visible = true; Thread.Sleep(3000);
Application.Run(f1);
Thread.Sleep(3000);
f1.Text = "After Application.Run is called";
}
}
 2007 Dr. Natheer Khasawneh.
SimpleForm6.cs
using System.Threading;
using System.Windows.Forms;
class SimpleForm
{
public static void Main()
{
What is the output?
Form f1 = new Form();
f1.Text = "How are you all doing?";
f1.Visible = true;
Thread.Sleep(3000);
f1.Text = "And How is your Baba?";
Application.Run(f1);
Thread.Sleep(3000);
f1.Text = "After Application.Run is called";
MessageBox.Show("And your Daddy too?");
}
}
 2007 Dr. Natheer Khasawneh.
Conclusion
• Main creates the form and displays it.
• The form is given to Application.Run where it
continues to exist.
• The form takes control of execution until the form
is dismissed.
• When the form is dismissed, presumably, the
Application.Run method continues (err, ends).
• The Application.Run method returns control to
Main, which then calls the MessageBox.Show
method.
• The application ends after the MessageBox is
dismissed
 2007 Dr. Natheer Khasawneh.
SimpleForm7.cs
using System.Threading;
using System.Windows.Forms;
Take Home
Bring back your description
class SimpleForm
Quiz
{
public static void Main()
{
Form f0 = new Form(); f0.Text = "How are you?";
Form f1 = new Form(); f1.Text = "How is C#?";
Form f2 = new Form(); f2.Text = "How is C++";
f0.Show(); f2.Show();
Application.Run(f1);
MessageBox.Show("Where are we?");
f2.Text = "F2, after Application.Run is called";
Thread.Sleep(3000);
}
}
 2007 Dr. Natheer Khasawneh.
Not Very Simple Windows Application!
• Drag and drop textbox and button from the toolbox
into the Form
• Lets see what happened to our three files.
• Program.cs Form1.cs Form1.Designer.cs
 2007 Dr. Natheer Khasawneh.
Program.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;
NO CHANGES!
namespace SimpleApplication
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
 2007 Dr. Natheer Khasawneh.
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace SimpleApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
 2007 Dr. Natheer Khasawneh.
NO CHANGES!
namespace SimpleApplication
{
partial class Form1
{
//SAME AS BEFORE CODE OMMITED FOR SPACE
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
// textBox1
this.textBox1.Location = new System.Drawing.Point(72, 24);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(100, 20);
this.textBox1.TabIndex = 0;
// button1
this.button1.Location = new System.Drawing.Point(82, 59);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
// Form1
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(246, 109);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
this.PerformLayout();}
#endregion
}
}
 2007 Dr. Natheer Khasawneh.
Form1.Designer.cs
We have two new fields
The fields
properties are
initialized
The fields are
attached to the
Form
Not Simple Windows Application!
• Lets say I want to find the square of the number
entered
• Double click on the button, and suddenly Form1.cs
is opened for me and the following code is displayed
for me.
 2007 Dr. Natheer Khasawneh.
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace SimpleApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int x = int.Parse(textBox1.Text);
x = x*x;
MessageBox.Show(x.ToString());
}
}
}
 2007 Dr. Natheer Khasawneh.
This method is written
for me
I wrote this code
Form1.Designer.cs
namespace SimpleApplication
{
partial class Form1
{
//SAME AS BEFORE CODE OMMITED FOR SPACE
//THE BUTTON1 IS THE PART THAT CHANGES
// button1
//
this.button1.Location = new System.Drawing.Point(82, 59);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
}
}
control
Event
Event handler
(method name)
 2007 Dr. Natheer Khasawneh.
Form as container
• Form manages a list of controls
– stored in Controls collection property
all forms inherit
Controls collection
class MyForm : Form
{
Button button1 = new Button();
Label label1 = new Label ();
public MyForm()
{
...
this.Controls.Add(button1);
this.Controls.Add(label1 );
}
...
add to collection
}
myForm
Controls
 2007 Dr. Natheer Khasawneh.
button1
label1
What We Just Did?
• We have attached an event handler for the click
event.
• Button has Click event
• If this event happens (some one clicks on the
button)
• button1_Click method will be executed.
 2007 Dr. Natheer Khasawneh.
using System;
using System.Threading;
using System.Windows.Forms;
class SimpleForm
{
public static void Main()
{
MyForm f1 = new MyForm();
Application.Run(f1);
}
}
class MyForm : Form
{
private TextBox textBox1;
private Button button1;
SimpleForm8.cs
I like this code..
public MyForm()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.textBox1.Location = new System.Drawing.Point(72, 24);
this.textBox1.Name = "textBox1";
this.button1.Location = new System.Drawing.Point(82, 59);
this.button1.Name = "button1";
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
}
private void button1_Click(object sender, EventArgs e)
{
int x = int.Parse(textBox1.Text);
x = x * x;
MessageBox.Show(x.ToString());
}
}
 2007 Dr. Natheer Khasawneh.
Descargar

Document