中国科学技术大学网络学院 第四章 winforms 基础知识. 2 目标 理解 windows 窗体...

Post on 20-Dec-2015

557 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

中国科学技术大学网络学院

第四章

WinForms 基础知识

2

目标

理解 Windows 窗体使用基本控件如标签、文本、按钮、列表框和组合框掌握窗体的常用属性和方法使用 WinForms 中的高级控件

单选按钮图片框选项卡控件滚动条 进度条

3

简介 2-1

GUI 界面

控件控件

4

各种控件各种控件属性属性

放置控件的区域放置控件的区域

5

简介 2-2

WinForms 应用程序可能存在多个窗体,用于获取用户输入的数据和向用户显示数据

WinForms 应用程序可能存在多个窗体,用于获取用户输入的数据和向用户显示数据

System.Windows.FormsSystem.Windows.Forms

简单而强大

改善了接口和基类 IntelliSense

新的管理数据提供程序

安全

灵活的控件

通晓数据

向导

6

创建 WinForms 应用程序 6-1

“ 开始”“程序”“ Microsoft Visual Studio.NET 2005”“Microsoft Visual

Studio.NET 2005”

“ 开始”“程序”“ Microsoft Visual Studio.NET 2005”“Microsoft Visual

Studio.NET 2005”

7

创建 WinForms 应用程序 6-2

设计窗口 设计窗口

8

创建 WinForms 应用程序 6-3using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;

namespace WindowsApplication3{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } }}

提供了大量绘图工具的访问权限提供了大量绘图工具的访问权限基础核心命名空间基础核心命名空间

ArrayList、 BitArray、 Hashtable、 Stack、 StringCollection 和 StringTable 类 ArrayList、 BitArray、 Hashtable、 Stack、 StringCollection 和 StringTable 类

大量窗体和控件大量窗体和控件

从 System.Windows.Forms.Form 派生从 System.Windows.Forms.Form 派生

Visual Studio .NET 生成的代码Visual Studio .NET 生成的代码

9

创建 WinForms 应用程序 6-4

partial class Form1 { /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.IContainer components = null;

构造函数调用 InitializeComponent() 方法

#region Windows 窗体设计器生成的代码

/// <summary> /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容。 /// </summary> private void InitializeComponent() { this.SuspendLayout(); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(333, 266); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion

项目的容器项目的容器

10

创建 WinForms 应用程序 6-5

/// <summary> /// 清理所有正在使用的资源。 /// </summary> /// <param name="disposing"> 如果应释放托管资源,为 true;否则

为 false。 </param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } 释放系统资源释放系统资源

11

创建 WinForms 应用程序 6-6

static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } }

程序的主入口点 程序的主入口点

12

WinForms 中的常用控件 2-1

可视化界面组件统称为控件可视化界面组件统称为控件System.Windows.Forms.ControlSystem.Windows.Forms.Control

System.Windows.Forms

Control

ButtonBase

Button

CheckBox

Label

ListControl

ComboBox

ListBox

TextBoxBaseTextBoxBase

TextBox

RadioButton

13

WinForms 中的常用控件 2-2

标签标签

按钮按钮

组合框组合框

列表框列表框

文本框文本框

14

标签

属性 说明

Text 该属性用于设置或获取与该控件关联的文本

方法 说明

Hide隐藏控件,调用该方法时,即使 Visible 属性设置为 True ,控件也不可见

Show 相当于将控件的 Visible 属性设置为 True 并显示控件

事件 说明

Click 用户单击控件时将发生该事件

15

文本框

属性 说明

MaxLength 可在文本框中输入的最大字符数

Multiline 表示是否可在文本框中输入多行文本

Passwordchar 机密和敏感数据,密码输入字符

ReadOnly 文本框中的文本为只读

Text 检索在控件中输入的文本

方法 说明

Clear 删除现有的所有文本

事件 说明

KeyPress 用户按一个键结束时将发生该事件

16

按钮

属性 说明

Enabled 确定是否可以启用或禁用该控件

方法 说明

PerformClick Button 控件的 Click 事件

事件 说明

Click 单击按钮时将触发该事件

17

列表框

属性

Items

SelectionMode

SelectedIndex

SelectedItem

SelectedItems

Text

方法

ClearSelected

事件

SelectedIndexChanged

18

使用列表框

private void frmUserAdd_Load(object sender, System.EventArgs e){

this. lstCurrDeptName.Items.Add(“ 学工部 "); this. lstCurrDeptName.Items.Add(“ 体军部 "); this. lstCurrDeptName.Items.Add(“ 教务处 "); this. lstCurrDeptName.Items.Add(“ 人事处 ");

}

private void cmdOK_Click(object sender, System.EventArgs e){

// 注意 SelectedIndex 的值,第一个应该为 0if (this. lstCurrDeptName.SelectedIndex ==0){ MessageBox.Show(this. lstCurrDeptName.Text +

" 已经选择上 ..."," 当前选择的值 "); }}

19

组合框

属性 说明

DropDownStyle ComboBox 控件的样式

MaxDropDownItems 下拉区显示的最大项目数

方法 说明

Select 在 ComboBox 控件上选定指定范围的文

20

使用组合框private void frmUserAdd_Load(object sender, System.EventArgs e){ ……

this.cboDesig.Items.Add(“ 校长 "); this. cboDesig.Items.Add(“ 副校长 "); this. cboDesig.Items.Add(“ 总书记 "); this. cboDesig.Items.Add(“ 校长顾问 "); // 默认的选择是 " 校长 "this. cboDesig.SelectedIndex = 0;

}

private void cboDesig_SelectedIndexChanged(object sender, System.EventArgs e)

{ MessageBox.Show( " 选择的是第“+ (this.cboDesig.SelectedIndex+1).ToString(), " 选择的信息 ");

MessageBox.Show( " 选择的职务是“ + this.cboDesig.Text, " 选择的信息 ");

}

21

消息框窗口 2-1

MessageBox.Show(“[ 消息文本 ]");

消息框用于显示消息消息框用于显示消息

YesNo ButtonsDefault Button - YES

MessageBoxIcon

Abort, Cancel, Ignore, No, None, Ok, Retry 和 Yes Abort, Cancel, Ignore, No, None, Ok, Retry 和 Yes

if (MessageBox.Show(“ 保存文件” ,“ 保存 ", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) == DialogResult.Yes){

// 保存文件所用的代码// 保存后的 MessageBox

}

22

消息框窗口 2-2

重载方法

Show(string text);

Show(string text, string caption);

Show(string text, string caption, MessageBoxButtons buttons);

Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon);

……

23

应用程序示例 3-1

解决方案资源管理器

解决方案资源管理器

属性窗口属性窗口

工具箱工具箱

24

应用程序示例 3-2

private void btnAdd_Click(object sender, System.EventArgs e){

}

private void btnAdd_Click(object sender, System.EventArgs e){

this.txtEmpName.Enabled=true;this.txtAddress.Enabled=true;this.cboDesignation.Enabled=true;this.lstCurrDeptName.Enabled=true;

}

private void btnCancel_Click(object sender, System.EventArgs e){

this.txtEmpName.Text="";this.txtAddress.Text="";this.cboDesignation.Text=“ 经理 ";

}

private void btnExit_Click (object sender, System.EventArgs e){

string str="";for(int ctr=0;ctr<=this.lstCurrDeptName.SelectedItems.Count-1;ctr++) str += "\n"+this.lstCurrDeptName.SelectedItems[ctr].ToString();MessageBox.Show(“ 选定的项目为 \n" +str);Application.Exit();

}

25

应用程序示例 3-3

private void cboDesignation_SelectedIndexChanged(object sender, System.EventArgs e)

{MessageBox.Show(“ 您已经选定了 " +

this.cboDesignation.SelectedItem.ToString());}

在退出应用程序之前,使用 MessageBox.Show() 显示在 str 变量中存储选定项的消息框

在退出应用程序之前,使用 MessageBox.Show() 显示在 str 变量中存储选定项的消息框

26

窗体容器简介 2-1

图标 系统按钮System.Windows.Forms

ControlControl

ScrollableControlScrollableControl

ContainerControlContainerControl

FormForm

标题栏

控件

27

窗体容器简介 2-2

SDI [ 单文档界面 ]

MDI [ 多文档界面 ]

模式窗口

28

窗体的属性

属性

ActiveForm

CancelButton

ControlBox

FormBorderStyle

HelpButton

KeyPreview

MainMenu

Modal

ShowInTaskbar

WindowState

29

窗体的常用方法和事件

方法

Activate

LayoutMdi

ShowDialog

事件

Activated

Closed

Closing

Load

30

显示另一窗体

[ 被调用的窗体类 ] [ 窗体实例 ] = new [ 被调用的窗体类 ]();[ 被调用的窗体类 ] [ 窗体实例 ] = new [ 被调用的窗体类 ]();

[ 窗体实例 ].Show();

[ 窗体实例 ].Show();

private void cmdShow_Click(object sender, System.EventArgs e){

frmA A = new frmA();A.Show();

}

31

应用程序示例 6-1

单击“发送”按钮

32

应用程序示例 6-2

控件 名称

Form frmFeedBack

TextBox (姓名 ) txtName

TextBox ( 电子邮件地址 ) txtEmailId

ComboBox (主题 ) cboSubject

TextBox (反馈 ) txtFeedback

TextBox (反馈 )MultiLine 属性 True

Button (发送 ) btnSend

Button (关闭 ) btnClose

控件 名称

Form frmUserDetails

ListBox lstvalues

MultiColumn true

Button btnClose

33

应用程序示例 6-3

private void frmFeedBack_Load(object sender, System.EventArgs e){

this.cboSubject.Items.Add(“ 文字效果反馈 ");this.cboSubject.Items.Add(“ 版面设计反馈 ");this.cboSubject.Items.Add(“ 颜色反馈 ");this.cboSubject.Items.Add(“ 普通反馈 ");

}

private void btnSend_Click(object sender, System.EventArgs e){

frmUserDetails objfrmUserDetails = new frmUserDetails(this.txtName.Text,

this.txtEmailId.Text, this.cboSubject.SelectedItem.ToString(),this.txtFeedback.Text);objfrmUserDetails.Show();

}

34

应用程序示例 6-4

private void btnClose_Click(object sender, System.EventArgs e){

this.Close();}

private void frmFeedBack_Closed(object sender, System.EventArgs e){

MessageBox.Show(“ 你的意见很好,非常感谢! ");}

35

应用程序示例 6-5

public class frmUserDetails : System.Windows.Forms.Form{

………………………………………………………………………………private string _name;private string _email;private string _subject;private string _feedBack;………………………………………………………………………………

}

36

应用程序示例 6-6

public frmUserDetails(string Name, string Email, string Subject, string FeedBack){

InitializeComponent();// 在 private 变量中存储值 this._name = Name;this._email = Email;this._subject = Subject;this._feedBack = FeedBack;// 在列表框中放置值 this.lstValues.Items.Add(this._name);this.lstValues.Items.Add(this._email);this.lstValues.Items.Add(this._subject);this.lstValues.Items.Add(this._feedBack);

}

37

单选按钮

Windows 窗体单选按钮控件以组的形式使用单选按钮允许用户从多个选项中选择一个选项

属性 说明

Checked 确定是否已选定控件

方法 说明

Focus 将输入焦点移至控件

38

图片框图片框控件表示可用于显示图像的 Windows 图片框控件

显示位图、元文件、图标、 JPEG、GIF 或 PNG 等格式的图形

显示位图、元文件、图标、 JPEG、GIF 或 PNG 等格式的图形是一种图形显示控件是一种图形显示控件

属性 说明

Image 用于指定图片框显示的图像。该图像可在设计或运行时设置

SizeMode 用于指定图像的显示方式。可以指定的各种大小模式包括 AutoSize 、 CenterImage 、 Normal 和 StretchImage 。默认值为 Normal

方法 说明

Show 显示控件

图片框图片框

39

选项卡控件

在 Windows 应用程序中,选项卡用于将相关的控件集中在一起,放在一个页面中选项卡控件用于显示多个选项卡,其中每个选项卡均可包含图片和其他控件选项卡相当于另一个窗体,可以容纳其他控件

选项卡控件

40

选项卡控件的属性

属性 说明

MultiLine 指定是否可以显示多行选项卡。如果可以显示多行选项卡,该值应为 True,

否则为 False 。默认值为 False

SelectedIndex 当前所选选项卡页的索引值。该属性的值为当前所选选项卡页的基于 0 的索

引。默认值为 -1,如果未选定选项卡页,则为同一值

SelectedTab 当前选定的选项卡页。如果未选定选项卡页,则值为 NULL 引用

ShowToolTips 指定在鼠标移至选项卡时,是否应显示该选项卡的工具提示。如果对带有工具

提示的选项卡显示工具提示,该值应为 True ,否则为 False

TabCount 检索选项卡控件中选项卡的数目

41

选项卡控件的事件

事件 说明

SelectedIndexChanged 更改 SelectedIndex 属性值时,将触发该事件

42

滚动条

用于上下或者左右滚动整个窗口或者文档 在 Microsoft Word 或 Excel 中,为浏览多页面的文档提供了滚动条

滚动条滚动条

垂直滚动条垂直滚动条 水平滚动条水平滚动条

属性 说明

Maximum 用于表示滚动范围的上限值。默认值为 100

Minimum 用于表示滚动范围的下限值。默认值为 0

Value 该属性表示滚动条控件中代表滚动框的当前位置的数字。默认值为 0

事件 说明

Scroll 移动滚动条上的滚动框时,将触发该事件

ValueChanged 更改 Value 属性的值时,将触发该事件。 Value 属性的值可由滚动事件更改,也可以通过程序来更改

滚动条的属性和事件如下:

带有滚动条的 MS Word 文档窗口

43

进度条

用于指示操作的进度、完成的百分比外观是排列在水平条中的一定数目的矩形

44

进度条的属性和方法

属性 说明

Maximum 进度条控件的最大值。默认值为 100

Minimum进度条控件的最小值。进度条从最小值开始递增,直至达到最大值。

默认值为 0

Step PerformStep 方法应据以增加进度条的光标位置的值。默认值为 10

Value 进度条控件中光标的当前位置。默认值为 0

方法 说明

Increment 按指定的递增值移动进度条的光标位置

PerformStep 按 Step 属性中指定的值移动进度条的光标位置

45

应用程序示例 9-1

使用窗体接受职员的个人信息和职业信息将使用单选按钮、图片框和选项卡控件应用程序提供有两个选项卡页第一个选项卡页显示个人信息的文本框

46

应用程序示例 9-2

第二个选项卡页显示职员信息的文本框

47

应用程序示例 9-3

新建一个 Windows 应用程序,并将其命名为 EmployeeForm单击“视图”“解决方案资源管理器”将 Form1.cs 文件更改为 frmEmployees.cs单击“视图”“属性”将 窗体的 Name 属性更改为 frmEmployee ,并将 Text 属性更改为职员申请表单击“ 视图”“工具箱” 以调用工具箱窗口在窗体中添加一个选项卡控件按以下幻灯片所示更改属性

48

应用程序示例 9-4tabPersonal 选项卡页

控件 名称 文本

分组框 grpGeneral 一般信息

分组框 grpGender 性别

标签 lblName 姓名:

标签 lblAddress 住址:

标签 lblPhone 电话号码:

文本框 txtName

文本框 txtAddress

文本框 txtPhone

图片框 picLogo

单选按钮 radMale 男

单选按钮 radFemale 女

按钮 btnNext 下一步 (&N)

tabProfessional 选项卡页 :

控件 名称 文本

标签 lblQual 输入学历:

标签 lblWorkExp 工作经验(年):

文本框 txtQual

文本框 txtWorkExp

按钮 btnBack 上一步 (&B)

按钮 btnDone 完成 (&D)

49

应用程序示例 9-5

在“下一步”按钮的 Click 事件中添加以下代码

private void btnNext_Click(object sender, System.EventArgs e){ if (tabMain.SelectedIndex ==0) { vsbPersonal.Visible = false;

tabMain.SelectedIndex = 1; }}

在选项卡控件的 Click 事件中编写以下代码。

private void tabMain_Click(object sender, System.EventArgs e){

if (tabMain.SelectedIndex ==0) {

vsbPersonal.Visible =false;tabMain.SelectedIndex = 1;

}else if (tabMain.SelectedIndex ==1) {

vsbPersonal.Visible = true;tabMain.SelectedIndex = 0;

}}

50

应用程序示例 9-6

在“上一步”按钮的 Click 事件中添加以下代码

private void btnBack_Click(object sender, System.EventArgs e){

if (tabMain.SelectedIndex ==1) { vsbPersonal.Visible = true;

tabMain.SelectedIndex = 0; }}

在“完成”按钮中添加以下代码

private void btnDone_Click(object sender, System.EventArgs e){

MessageBox.Show(“ 感谢您” ,“ 信息 ");Application.Exit();

}

51

在垂直滚动条的 Scroll 事件中编写以下代码

private void vsbPersonal_Scroll(object sender, System.Windows.Forms.ScrollEventArgs e){

vAbsPos = (float)(vsbPersonal.Value - vsbPersonal.Minimum);SetVerticalScrollMultiplier(grpGeneral);

// 检查滚动方向是自上往下还是自下往上if (vsbPersonal.Value > oldValue) {

grpGeneral.Top = grpGeneral.Top - (int)(vScrollMultiplier * vAbsPos);

picLogo.Top = picLogo.Top - (int)(vScrollMultiplier * vAbsPos);

grpGender.Top = grpGender.Top - (int)(vScrollMultiplier * vAbsPos);

应用程序示例 9-7

检查滚动方向检查滚动方向

52

应用程序示例 9-8

btnNext.Top = btnNext.Top - (int)(vScrollMultiplier * vAbsPos);

}else if (vsbPersonal.Value < oldValue) {

grpGeneral.Top = grpGeneral.Top + (int)(vScrollMultiplier * vAbsPos);

picLogo.Top = picLogo.Top + (int)(vScrollMultiplier * vAbsPos);

grpGender.Top = grpGender.Top + (int)(vScrollMultiplier * vAbsPos);

btnNext.Top = btnNext.Top + (int)(vScrollMultiplier * vAbsPos);

}oldValue = vsbPersonal.Value;

}检查滚动方向(续)检查滚动方向(续)

53

应用程序示例 9-9

编写以下自定义方法以便计算垂直滚动量

private void SetVerticalScrollMultiplier(Control ctrl)

{

float hsb = (float)(vsbPersonal.Height - ctrl.Height);

float ticks = (float)(vsbPersonal.Maximum - vsbPersonal.Minimum);

vScrollMultiplier = hsb / ticks;

}

54

总结 2-1

WinForms 可用于 Windows 窗体应用程序开发Windows 窗体控件是从 System.Windows.Forms.Control 类派生的类标签控件用于显示用户不能编辑的文本或图像按钮控件提供用户与应用程序交互的最简便方法组合框控件是列表框控件和文本框控件的组合,用户可以键入文本,也可以从所提供的列表中选择项目窗体提供了收集、显示和传送信息的界面,是 GUI 的重要元素消息框显示消息,用于与用户交互

55

总结 2-2WinForms 单选按钮控件允许用户进行设置WinForms 的图片框控件允许用户在窗体上添加和显示位图、元文件、 JPEG、 GIF 或 PNG 等格式的图形WinForms 的选项卡控件将类似的功能集中在一起,放在一个对话框或窗口中WinForms 的 HScrollBar 和 VScrollBar 用作水平和垂直滚动条,分别以水平和垂直方式浏览(或滚动)整个文档进度条控件用于指示操作的进度,并显示排列在水平条中一定数目的矩形,通常通过在程序中设置其 Value 值来显示任务完成的百分比

top related