Lập trình GUI trong môi trường window
Trang 2Nội dung
Các control cơ bản trong window form
Các Dialog Cách tạo Menu Tạo window Form &
Mô tả các đặc tính của Window Form
Trang 31.FORM
Trang 4 Giao diện người dùng cung cấp phương tiện để
người dùng có thể tương tác được với chương trình ứng dụng.
Có hai loại giao diện người dùng:
Giao diện người dùng dạng ký tự (Character User
Interface CUI): người dùng tương tác với chương trình theo câu lệnh nhập từ bàn phím: ví dụ Ms Dos.
Giao diện người dùng dạng đồ họa (Graphical User
Interface GUI): người dùng tương tác với chương trình thông qua hệ thống các window.
Giao diện người dùng đồ họa được hiện thực thông qua Window Form và các control chứa bên trong
của nó.
Giao diện người dùng
Trang 5 Các window form dùng để hiển thị tất cả các
cửa sổ trong chương trình ứng dụng
Nhận dữ liệu vào từ người dùng và hiển thị
thông tin kết quả.
Khi tạo ra 1 project kiểu Window Application, sẽ
có 1 window form tự động được thêm vào project.
Tất cả các Window form được thừa kế từ lớp
Form chứa trong namespace:
System.Windows.Forms
Cũng có thể kế thừa từ các window form có
sẵn, rồi thêm vào các tính năng mới.
Window Form
Trang 6 Hình sau đây là ví dụ về giao diện một cửa sổ đăng
nhập:
Window form
Trang 7Visual Studio Net
controls
designer
Properties, events
Trang 88
Trang 9 Project Add Reference
Trang 10 Một « form » là một cửa sổ màn hình - một đơn vị giao diện người dùng do Microsoft đưa ra kể từ
Windows 1.0
Một ứng dụng Windows Forms (WinForms) phải
có ít nhất một cửa sổ « main form » (cửa sổ chính
Form có thể chứa các component
Form có thể có các file resource
Trang 14Windows Forms Application Structure
A Windows Forms application has three pieces
o the application itself
o forms in the application
o controls on the for m
Application
mainForm
MyForm
label1button1
Label
“Hell…”
Button
“OK”
Trang 15GUI Tree Structure
Panel
ButtonForm
Trang 16Form Properties
FormBorderStyle FormBorderStyle:
FixedDialog, Fixed3D…
Kiểu đường viền
ControlBox bool Có system menu box?
Trang 17Form Properties
SizeGripStyle SizeGripStyle: Show, Hide…
WindowState FormWindowState: Normal,
Maximized, Minimized TopMost bool
Trang 19StartPosition - FormBorderStyle
FixedDialog : modal dialog boxes
FixedSingle : main form
None : splash screen
Sizable
Trang 20Application class
Exit Stops all running message loops and closes all windows in the
application Note that this may not force the application to exit
Run Starts a standard message loop on the current thread If a
Form is given, also makes that form visible.
DoEvents Processes any Windows messages currently in the message
queue.
Trang 22Cơ chế hoạt động Form
Trang 23 Một event là một đối tượng biểu diễn một hành động
Ví dụ:
o The mouse is moved or button clicked
o The mouse is dragged
o A graphical button is clicked
o A keyboard key is pressed
handler
event
program message
Trang 24Event Handler:
{ Get N1 and N2 Return N1+N2 Call the program }
Program:
Put N1+N2
Trang 25GUI Control
GUI Control
Handler
Trang 26C# WinApp (code tự phát sinh)
namespace MyWindowsApplication1 {
public class MyForm1 : System.Windows.Forms.Form {
// inherit from Form base class
public MyForm1( ) // constructor, calls InitializeComponent( )
private void InitializeComponent( ) // VS auto-generated GUI code
protected override void Dispose( bool disposing )
// standard method to clean up resources
static void Main( ) { // App starts here!
Application.Run(new MyForm1( ));
// create a new MyForm1 and run the main event loop
}
Trang 27GUI program
GUI program:
main(){
decl data storage;
}
User input commands
Non-linear execution
Unpredictable order
Much idle time
Event callback procs
Trang 28Run(new ) }
callback1(){
do stuff;
} callback2(){
Trang 29GUI Events
Window System
eventloop
App1 OK
Cancel
App2 code:
OKbtn_click() {
do stuff;
} CancelBtn_click() {
do different stuff; }
App2Form_click() {
do other stuff; }
mouseclick
inputdevice
App1
eventloop
App2
eventloop
whichapp?
whichcontrol?
App2 OK Cancel
Trang 301 Đăng ký control để nhận events
Gắn vào Control một function pointer để gọi callback function
this.button1.Click += new EventHandler(this.button1_Click);
2 Nhận events từ control
Control sẽ gọi function pointer
private void button1_Click(object sender, EventArgs e){
Trang 31Event Handler
Thông điệp gửi đi bằng cách chuyển giao.
Bộ xử lý sự kiện(Event Handler) sẽ được gọi khi
sự kiện tương ứng phát sinh
void EventMethodName(Object sender, EventArgs e)
Trang 32 Sự kiện được sinh ra khi người dùng thao tác trên
window form ví dụ như người dùng click chuột, gõ
phím…Chương trình sẽ bắt các sự kiện này để đáp ứng lại yêu cầu người dùng.
Mỗi control có một danh sách các sự kiện đi kèm theo.
Các sự kiện có sẵn trong window form là:
Resize
Trang 33 Event handler: là phương thức dùng để xử lý sự kiện.
Sự kiện trong Window Form (tt)
using System; using System.Windows.Forms;
public class MyForm : Form {
void btn1_onclick(object sender, EventArgs e)
{ Text = "Sender: " + sender.ToString( ) + " - Event: " + e.ToString( ); } public MyForm( ) {
Text = "Hello World";
Button btn1 = new Button( );
btn1.Text = "Click Me";
this.Controls.Add (btn1);
btn1.Click += new EventHandler (btn1_onclick); } public static void Main( ) {
Application.Run(new MyForm( )); } }
Trang 34 Ví dụ sau đây thể hiện đoạn mã của event
handler
private void ClickHandler(object sender,
System.EventArgs e) { MessageBox.Show("Clicked!","My Windows Form",MessageBoxButtons.OK); }
Sender: là đối tượng phát sinh sự kiện.
e: dữ liệu được gởi kèm theo với sự kiện.
Sự kiện trong Window Form (tt)
Trang 35Phương thức trong window form
thực hiện một số thao tác như mở form, đóng
form, load form…
• Show()
• Activate()
• Close()
•SetDesktopLocation()
Trang 36class Program
{
static void Main(string[] args) {
Form f = new Form();
f.Load += new EventHandler(f_Load);
Trang 39static void Main(string[] args)
{
Form f1 = new Form();
f1.Text = "2 Paint Event";
f1.BackColor=Color.White;
f1.Paint += new PaintEventHandler(f1_Paint1);
f1.Paint += new PaintEventHandler(f1_Paint2);
Trang 40 Sự kiện được sinh ra khi người dùng thao tác trên window form ví dụ như người dùng click chuột, gõ phím…Chương trình sẽ bắt các sự kiện này để
đáp ứng lại yêu cầu người dùng.
Trang 41 Event handler: là phương thức dùng để xử lý sự kiện.
Sự kiện trong Window Form (tt)
using System; using System.Windows.Forms;
public class MyForm : Form {
void btn1_onclick(object sender, EventArgs e)
{ Text = "Sender: " + sender.ToString( ) + " - Event: " + e.ToString( ); }
public MyForm( ) {
Text = "Hello World";
Button btn1 = new Button( );
btn1.Text = "Click Me";
this.Controls.Add(btn1);
btn1.Click += new EventHandler(btn1_onclick); } public static void Main( ) {
Application.Run(new MyForm( )); } }
Trang 42 Ví dụ sau đây thể hiện đoạn mã của event
Sender: là đối tượng phát sinh sự kiện.
e: dữ liệu được gởi kèm theo với sự kiện.
Sự kiện trong Window Form (tt)
Trang 43Phương thức trong window form
thực hiện một số thao tác như mở form, đóng
form, load form…
• Show()
• Activate()
• Close()
• SetDesktopLocation()
Trang 44Thêm GUI Controls
public class MyForm1 : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1;
… // member variables for each GUI control
private void InitializeComponent( ) // VS auto-generated GUI code
// create GUI controls:
this.button1 = new System.Windows.Forms.Button( );
// set properties of GUI controls :
Trang 45Thêm control
static void Main(string[] args)
{
Form f1 = new Form();
Button b = new Button();
b.Text = "OK";
b.Click+=new EventHandler(b_Click);
b.Location = new Point(10, 10);
Button b1 = new Button();
b1.Text = "Exit";
b1.Click += new EventHandler(b1_Click);
b1.Location= new Point(b.Left, b.Height + b.Top + 10);
Trang 47Form f = new Form ();
f.Load += new EventHandler (f_Load);
Trang 48Tạo Form (kế thừa Form cơ sở)
public class MyForm : System.Windows.Forms.Form {
public MyForm( ) // constructor
Tất cả ứng dụng Windows Forms dẫn xuất từ lớp
System.Windows.Forms.Form Một ứng dụng Win forms được tạo như sau:
Trang 49Form f = new Form();
f.Load += new EventHandler(f_Load);
Button button1 = new Button();
Trang 50Tạo hàm cho sự kiện control
static int x = 200;
static int y = 200;
private void Button1_Click(System.Object sender,
System.EventArgs e) {
Form form2 = new Form();
form2 Visible = true;
// Set the new form's desktop location so it
// appears below and to the right of the current form
form2.SetDesktopLocation(x, y);
x += 30;
y += 30;
}
Trang 53Myform f=new Myform();
f.Text = "Ke thua tu " + f.Text;
Trang 55MessageBox.Show
MessageBox.Show (String strText)
MessageBox.Show (String strText, String strCaption)
MessageBox.Show (String strTex, String strCaption
, MessageBoxButtons mbb)
MessageBox.Show (String strTex, String strCaption
, MessageBoxButtons mbb, MessageBoxIcon mbi)
MessageBox.Show (String strTex, String strCaption
, MessageBoxButtons mbb , MessageBoxIcon mbi,
MessageBoxDefaultButton mbdb)
MessageBox.Show (String strTex, String strCaption,
MessageBoxButtons mbb, MessageBoxIcon mbi,
MessageBoxDefaultButton mbdb, MessageBoxOptions mbo)
Trang 58Các thuộc tính/ph ương thức của window
form
Dùng để thay đổi giao
diện của Form lúc chạy
Trang 592.CONTROLS
Trang 60Form Controls
Là đơn vị cơ sở để tạo nên giao diện người
dùng trong lập trình WinForm.
Là bất kỳ đối tượng nào nằm trong vùng chứa
của Container có khả năng tương tác với người
sử dụng.
vào hoặc xuất dữ liệu trên window form
Các control có các đặc điểm, các phương thức
và các sự kiện riêng cho control đó
công cụ.
Trang 61 Hình sau đây mô tả một số form control
thường gặp:
Controls
Trang 62Các lớp cơ sở
System.Windows.Forms.Control -chứa chức năng cơ bản của thao
tác xử lý bàn phím và nhập từ chuột và xử lý tin nhắn window
System.Windows.Forms.ButtonBase - Lớp này hỗ trợ chức năng cơ
bản của một nút
System.Windows.Forms.TextBoxBase - cung cấp chức năng và thuộc
tính thông thuờng cho các lớp thừa hưởng Cả hai lớp TextBox và
RichTextBox sử dụng chức năng cung cấp bởi TextBoxBase
System.Windows.Forms.ScrollableControl - quản lý sự phát sinh và
hiển thị của các thanh cuộn đến người dùng để truy cập đến gốc của
một hiển thị
System.Windows.Forms.ContainerControl - Lớp này quản lý chức
năng yêu cầu cho một control để hành động
System.Windows.Forms.Panel - có thể chứa các control thêm vào,
nhưng khác với lớp ContainerControl, nó phân loại các control một cách
đơn giản
System.Windows.Forms.Form - Tạo bất kỳ loại cửa sổ nào: standard,
toolbox, borderless, modal dialog boxes và multi-document interfaces
System.Windows.Forms.UserControl - tạo một custom control đến
việc được dùng trong một nơi phức tạp trong một ứng dụng hay tổ chức
Trang 63STANDARD CONTROL
Một đối tượng control kế thừa trực tiếp/ gián tiếp
từ System.Windows.Forms.Control
Chia làm 3 loại:
Trang 64Events
Methods
Label
Trang 67PROPERTIE S
Trang 69SetItemChecked
SetItemCheckState
ItemCheck
CheckedListBox
Trang 71KiỂU TRÌNH BÀY
Kiểu trình bày cố định
o Thuộc tính Location: là 1 đối tượng của
System.Drawing.Point, góc trên bên trái
o Thuộc tính Size: là 1 đối tượng của
System.Drawing.Size
Kiểu trình bày động
o Anchoring
o Docking
Trang 72KiỂU TRÌNH BÀY CỐ ĐỊNH
void InitializeComponent() {
this.nameLabel = new Label();
this.nameTextBox = new TextBox();
this.occupationLabel = new Label();
this.occupationTextBox = new TextBox();
// nameLabel
this.nameLabel.Location = new Point(12, 15);
this.nameLabel.Size = new Size(34, 13);
// nameTextBox
this.nameTextBox.Location = new Point(79, 12);
this.nameTextBox.Size = new Size(110, 20);
// occupationLabel
this.occupationLabel.Location = new Point(12, 42);
this.occupationLabel.Size = new.Size(61, 13);
// occupationTextBox
this.occupationTextBox.Location = new Point(79, 39);
this.occupationTextBox.Size = new Size(110, 20);
}
Trang 73KiỂU TRÌNH BÀY ĐỘNG
Anchoring
Trang 74KiỂU TRÌNH BÀY ĐỘNG
Docking
Trang 75CONTAINER CONTROL
Có khả năng chứa nhiều controls
Thuộc tính Controls dùng để chứa danh sách các control
Trang 76THUỘC TÍNH CONTROL COLLECTION
Là tập hợp chứa các đối tượng control
Sử dụng Add(),Remove(), RemoveAt() để thêm,
xoá 1 control
Sử dụng Contain() để kiểm tra 1 control có nằm
trong tập các control của Form không
Form1.Controls.Remove(textbox1);
Form1.Controls.Remove(textbox1);
Form1.Controls.Add(textbox1);
Form1.Controls.Contains(textbox1);
Trang 77THÊM CONTROL VÀO CONTAINER
Tạo đối tượng control muốn thêm vào
Gắn control vào container
CheckBox signatureCheckBox = new CheckBox();
// set propertiessignatureCheckBox.Text = "Signature required";
signatureCheckBox.Left = 24;
signatureCheckBox.Top = 80;
CheckBox signatureCheckBox = new CheckBox();
// set propertiessignatureCheckBox.Text = "Signature required";
Trang 78LAYOUT CONTROLS
SplitContainer
Trang 79LAYOUT CONTROLS
FlowLayout
Trang 80LAYOUT CONTROLS
TableLayoutPanel
Trang 811: using System;
2: using System.Windows.Forms;
3: using System.Drawing;
4: 5: namespace TYWinforms.Day2 {
6: 7: public class Calculator : Form {
8: private Button btnAdd;
9: private TextBox tbNumber1;
10: private TextBox tbNumber2;
11: private Label lblAnswer;
12: 13: public static void Main() {
14: Application.Run(new Calculator());
15: }
16: 17: public Calculator() {
18: this.btnAdd = new Button();
19: this.tbNumber1 = new TextBox();
20: this.tbNumber2 = new TextBox();
21: this.lblAnswer = new Label();
22: 23: tbNumber1.Location = new Point(0,0);
24: tbNumber2.Location = new Point(100,0);
25: 26: btnAdd.Location = new Point(0,25);
Trang 8227: btnAdd.Text = "Add";
28: btnAdd.Click += new EventHandler(this.Add);
29: 30: lblAnswer.Location = new Point(0,75);
Trang 83public void CreateMyForm() {
Form form1 = new Form(); // Tạo thể hiện cho Form
Button button1 = new Button (); // Tạo button
Button button2 = new Button ();
button1.Text = "OK";
button1.Location = new Point (10, 10); //
// Set the text of button2 to "Cancel"
button2.Text = "Cancel";
button2.Location = new Point (button1.Left, button1.Height +
button1.Top + 10);
// Set the caption bar text of the form
form1.Text = "My Dialog Box";
// Add button1 to the form
form1.Controls.Add(button1); // Add button2 to the form
form1.Controls.Add(button2); // Display the form as a modal dialog box
Trang 85 Dùng để thực hiện một hành động khi người dùng
click chuột vào nó.
tin cho button.
GroupBox1.Text = “Select Gender”
Button
Trang 87Tạo Button trên Form
class MyForm : Form
{ //Data member to hold Button control
private Button BigButton;
public MyForm()
{
//Set the properties for the Button
BigButton = new Button ();
BigButton Location = new System.Drawing.Point(50, 50);
BigButton Name = "BigButton";
BigButton Size = new System.Drawing.Size(100, 100); BigButton Text =
"Click Me!";
BigButton.Click += new EventHandler(ClickHandler);
//Set properties of the Form itself
ClientSize = new System.Drawing.Size(200, 200);
Controls.Add (BigButton);
Text = "My Windows Form!";
}
Trang 88VALUE CONTROL
Dùng để hiển thị và chỉnh sửa các giá trị.
Có 08 loại:
o String Values: Label, TextBox, StatusBar
o Numeric Values: NumericUpDown, HSrollBar,
VScrollBar
o Boolean Values: CheckBox, RadioButton
o Date Values: DateTimePicker, MonthCalendar
o Graphic Values: PictureBox, PrintPreviewControl